当前位置: 首页 > wzjs >正文

网络销售平台上市公司有哪些谷歌广告优化师

网络销售平台上市公司有哪些,谷歌广告优化师,做女装代理需要自建网站么,郑州住房和城乡建设局网站目录 一、static 类成员的基本概念 1.1 静态成员的定义 1.2 静态数据成员 1.3 静态成员函数 1.4 内存布局 1.5 访问控制 1.6 性能分析 1.7 C标准演进 二、static 类成员的特点 2.1 共享性 2.2 不依赖于对象 2.3 无 this 指针 三、静态成员的初始化规则 3.1 初始化…

目录

一、static 类成员的基本概念

1.1 静态成员的定义

1.2 静态数据成员

1.3 静态成员函数

1.4 内存布局

1.5 访问控制

1.6 性能分析

1.7 C++标准演进

二、static 类成员的特点

2.1 共享性

2.2 不依赖于对象

2.3 无 this 指针

三、静态成员的初始化规则

3.1 初始化方式对比

3.2 初始化顺序

四、static 类成员的使用场景

4.1 计数功能

4.2 全局资源管理

4.3 单例模式

五、static 类成员与普通成员的区别

5.1 存储方式

5.2 访问方式

5.3 this 指针

六、static 类成员的注意事项

6.1 初始化顺序问题

6.2 线程安全问题

6.3 生命周期管理

七、总结

7.1 适用场景

7.2 使用原则

 八、参考资料


在 C++ 编程中,类是面向对象编程的核心概念之一,它允许我们将数据和操作这些数据的函数封装在一起。而static类成员则是类的一种特殊成员,它为类的设计和使用带来了更多的灵活性和强大的功能。static类成员包括静态数据成员和静态成员函数,它们不属于类的某个具体对象,而是为类的所有对象所共享。

一、static 类成员的基本概念

1.1 静态成员的定义

静态成员通过static关键字修饰,分为静态成员变量和静态成员函数:

  • 静态变量:所有对象共享同一份内存空间
  • 静态函数:没有this指针,只能访问静态成员

1.2 静态数据成员

静态数据成员是类的所有对象共享的一个数据项。无论创建多少个类的对象,静态数据成员都只有一份副本,存储在全局数据区。静态数据成员在类的定义中声明,但必须在类的外部进行定义和初始化。其声明语法如下:

class MyClass {static int staticDataMember; // 静态数据成员的声明
};

在类的外部进行定义和初始化:

int MyClass::staticDataMember = 0; // 静态数据成员的定义和初始化

C++17内联初始化

C++17支持在类内直接初始化:

class Config {
public:inline static string version = "1.2.3"; // 内联初始化
};

1.3 静态成员函数

静态成员函数也是类的所有对象共享的函数。它不与任何特定的对象相关联,因此没有this指针。静态成员函数只能访问类的静态数据成员和其他静态成员函数,不能访问类的非静态成员。静态成员函数的声明语法如下:在类的外部进行定义: 

class MyClass {static void staticMemberFunction(); // 静态成员函数的声明
};

在类的外部进行定义:

void MyClass::staticMemberFunction() {// 函数体
}

1.4 内存布局

  • 静态变量:存储在全局/静态存储区(.data/.bss段)
  • 非静态变量:每个对象独立存储
  • 虚函数表:若有虚函数,对象内存包含vptr指针 

1.5 访问控制

访问方式静态变量非静态变量
类名直接访问✔️
对象实例访问✔️✔️
派生类访问基类的protected静态成员✔️✔️

1.6 性能分析

操作时间复杂度空间复杂度线程安全
访问静态变量O(1)O(1)取决于实现
静态函数调用O(1)O(1)线程安全
原子操作修改O(1)O(1)✔️
互斥锁修改O(1)O(1)✔️

1.7 C++标准演进

C++版本新特性示例
C++11类内静态成员初始化static constexpr int MAX = 100;
C++11线程安全的静态局部变量初始化static Singleton instance;
C++17内联静态变量inline static int counter;

、static 类成员的特点

2.1 共享性

静态数据成员和静态成员函数为类的所有对象所共享。意味着无论创建多少个类的对象,静态数据成员只有一份副本,静态成员函数也只有一个实现。例如:

#include <iostream>
class Counter {
public:static int count; // 静态数据成员的声明Counter() {count++; // 每次创建对象时,静态数据成员count加1}static int getCount() { // 静态成员函数return count;}
};
int Counter::count = 0; // 静态数据成员的定义和初始化
int main() {Counter c1;Counter c2;std::cout << "Number of objects created: " << Counter::getCount() << std::endl;return 0;
}

count是静态数据成员,getCount是静态成员函数。每次创建Counter对象时,count的值会加 1。通过Counter::getCount()可以获取创建的对象的总数。

2.2 不依赖于对象

静态成员函数不与任何特定的对象相关联,因此可以在没有创建类的对象的情况下直接调用。静态数据成员也可以通过类名直接访问。例如:

#include <iostream>
class MathUtils {
public:static int add(int a, int b) { // 静态成员函数return a + b;}
};
int main() {int result = MathUtils::add(3, 5); // 直接通过类名调用静态成员函数std::cout << "Result: " << result << std::endl;return 0;
}

2.3 无 this 指针

静态成员函数没有this指针,因为它不与任何特定的对象相关联。意味着静态成员函数不能访问类的非静态成员,只能访问类的静态成员。例如: 

#include <iostream>
class MyClass {
private:int nonStaticData;static int staticData;
public:static void staticFunction() {// nonStaticData = 10; // 错误,静态成员函数不能访问非静态数据成员staticData = 20; // 正确,静态成员函数可以访问静态数据成员}
};
int MyClass::staticData = 0;

三、静态成员的初始化规则

3.1 初始化方式对比

初始化方式适用类型示例代码
类内直接初始化整型常量类型(C++11起)static constexpr int MAX = 100;
类外定义初始化所有类型double MathUtils::PI = 3.14159;
静态函数初始化复杂类型通过静态函数初始化静态变量

3.2 初始化顺序

  • 全局静态变量
  • 静态成员变量(按定义顺序)
  • main函数执行 
class A {
public:static int x;static int y;
};int A::x = initX();  // 初始化顺序:x先于y
int A::y = initY();

四、static 类成员的使用场景

4.1 计数功能

静态数据成员可以用于实现计数功能,统计类的对象的创建数量。如前面的Counter类示例,通过静态数据成员count记录创建的对象的总数。

4.2 全局资源管理

静态成员可以用于管理全局资源,如数据库连接、文件句柄等。由于静态成员为类的所有对象所共享,因此可以确保全局资源的唯一性和一致性。例如:

#include <iostream>
#include <fstream>
class FileManager {
private:static std::ofstream file; // 静态数据成员,用于管理文件句柄
public:static void openFile(const std::string& filename) {file.open(filename);}static void writeToFile(const std::string& data) {if (file.is_open()) {file << data << std::endl;}}static void closeFile() {if (file.is_open()) {file.close();}}
};
std::ofstream FileManager::file;
int main() {FileManager::openFile("test.txt");FileManager::writeToFile("Hello, World!");FileManager::closeFile();return 0;
}

FileManager类的静态数据成员file用于管理文件句柄,静态成员函数openFilewriteToFilecloseFile用于对文件进行操作。

4.3 单例模式

单例模式是一种设计模式,确保一个类只有一个实例,并提供一个全局访问点。静态成员可以用于实现单例模式。例如:

#include <iostream>
class Singleton {
private:static Singleton* instance; // 静态数据成员,指向单例对象Singleton() {} // 私有构造函数,防止外部创建对象Singleton(const Singleton&) = delete; // 禁用拷贝构造函数Singleton& operator=(const Singleton&) = delete; // 禁用赋值运算符
public:static Singleton* getInstance() {if (instance == nullptr) {instance = new Singleton();}return instance;}void doSomething() {std::cout << "Doing something..." << std::endl;}
};
Singleton* Singleton::instance = nullptr;
int main() {Singleton* singleton = Singleton::getInstance();singleton->doSomething();return 0;
}

Singleton类的静态数据成员instance用于存储单例对象的指针,静态成员函数getInstance用于获取单例对象的唯一实例。

五、static 类成员与普通成员的区别

5.1 存储方式

普通数据成员为类的每个对象所拥有,每个对象都有自己的一份副本,存储在对象的内存空间中。而静态数据成员为类的所有对象所共享,只有一份副本,存储在全局数据区。

5.2 访问方式

普通成员需要通过对象来访问,而静态成员可以通过类名直接访问,也可以通过对象访问。例如: 

#include <iostream>
class MyClass {
public:int nonStaticData;static int staticData;void nonStaticFunction() {std::cout << "Non-static function" << std::endl;}static void staticFunction() {std::cout << "Static function" << std::endl;}
};
int MyClass::staticData = 0;
int main() {MyClass obj;obj.nonStaticData = 10; // 通过对象访问非静态数据成员MyClass::staticData = 20; // 通过类名访问静态数据成员obj.nonStaticFunction(); // 通过对象访问非静态成员函数MyClass::staticFunction(); // 通过类名访问静态成员函数return 0;
}

5.3 this 指针

普通成员函数有this指针,指向调用该函数的对象。而静态成员函数没有this指针,因为它不与任何特定的对象相关联。

六、static 类成员的注意事项

6.1 初始化顺序问题

不同编译单元的静态成员初始化顺序不确定,应避免相互依赖。解决方案:

  • 使用单例模式

  • 使用局部静态变量

class Logger {
private:static map<string, string>& getConfig() {static map<string, string> config; // 保证初始化顺序return config;}
};

6.2 线程安全问题

多线程环境下需考虑同步:

#include <mutex>class Counter {
private:static int count;static mutex mtx;public:static void increment() {lock_guard<mutex> lock(mtx);++count;}
};int Counter::count = 0;
mutex Counter::mtx;

6.3 生命周期管理

静态成员的销毁顺序与初始化顺序相反,需注意:

  • 避免在静态析构函数中访问已销毁的静态成员

  • 优先使用智能指针 

class ResourceManager {
private:static shared_ptr<vector<Resource>> resources;
};shared_ptr<vector<Resource>> ResourceManager::resources = make_shared<vector<Resource>>();

七、总结

static类成员是 C++ 中一个非常重要的特性,它为类的设计和使用带来了更多的灵活性和强大的功能。静态数据成员和静态成员函数为类的所有对象所共享,不依赖于对象,没有this指针。它们可以用于实现计数功能、全局资源管理、单例模式等多种场景。在使用static类成员时,需要注意静态数据成员的初始化、静态成员函数的访问权限和静态成员的生命周期等问题。通过合理使用static类成员,可以提高代码的可维护性和可扩展性,使程序更加高效和健壮。 

7.1 适用场景

  • 全局配置管理

  • 跨实例资源共享

  • 对象跟踪与统计

  • 资源池管理

  • 工具类方法

7.2 使用原则

  • 优先考虑是否需要静态成员

  • 严格控制访问权限(private/protected)

  • 注意线程安全问题

  • 合理管理生命周期

  • 避免循环依赖

 八、参考资料

  •  《C++ Primer(第 5 版)》这本书是 C++ 领域的经典之作,对 C++ 的基础语法和高级特性都有深入讲解。
  • 《Effective C++(第 3 版)》书中包含了很多 C++ 编程的实用建议和最佳实践。
  • 《C++ Templates: The Complete Guide(第 2 版)》该书聚焦于 C++ 模板编程,而using声明在模板编程中有着重要应用,如定义模板类型别名等。
  • C++ 官方标准文档:C++ 标准文档是最权威的参考资料,可以查阅最新的 C++ 标准(如 C++11、C++14、C++17、C++20 等)文档。例如,ISO/IEC 14882:2020 是 C++20 标准的文档,可从相关渠道获取其详细内容。
  • :这是一个非常全面的 C++ 在线参考网站,提供了详细的 C++ 语言和标准库文档。
  • :该网站提供了系统的 C++ 教程,配有丰富的示例代码和清晰的解释,适合初学者学习和理解相关知识。
  • 《C++标准库(第2版)》Nicolai M. Josuttis 著

  • Effective STL Scott Meyers 著

  • C++ Core Guidelines:C++ Core Guidelines

  • C++ Reference:https://en.cppreference.com/w/ 


http://www.dtcms.com/wzjs/822535.html

相关文章:

  • 只做健康产品的网站可不可以建网站做微商
  • 网站建设的系统设计wordpress章节分页
  • 没有备案号的网站简述建设一个网站的具体步骤
  • 东莞制作公司网站的公司舆情监控系统
  • 个人做外贸网站违法吗房地产信息管理系统软件
  • 启用中文域名大网站wordpress文章管理
  • 网站建设公司初心网站建设深圳给源码
  • flash 企业网站 源码网页制作三合一案例教程
  • 兰州网站建设实验总结全国较好的网站建设公司
  • 交互式网站开发技术有哪些网站设计与开发怎么做
  • 北京市房山建设培训学校网站宣传部网站建设计划书
  • 专题网站开发工具给我免费播放的电影在线观看
  • 恩施网站建设公司山东省建设资格注册中心网站
  • 一般请人做网站和app多少钱平台网站建设网站
  • 网站后台管理模板免费下载网站建设是前端么
  • 服装箱包网站建设网站建设太金手指六六二五
  • 佛山科技网站建设高端网站设计公司有
  • 潘多拉固件建设网站微信里的小程序不见了
  • 投资交易网站开发群辉wordpress端口
  • 凡客建站网临沂个人做网站
  • 网页设计模板素材网站大全做网站都需要什么步骤
  • 淄博做网站的公司都有哪些电子商务搭建平台
  • 推销什么企业做网站和app6企业网站的建设目的包含什么
  • 个人网站做支付接口小程序招商加盟平台
  • 常州市城市建设局网站南京设计公司前十名
  • 济南城之运维网络科技seo网站推广软件
  • 东莞网络营销型网站一站式做网站价格
  • 免费的黄金网站有哪些企业网站seo运营
  • 一款非常不错的seo网站优化公司源码西双版纳傣族自治州医院
  • 公司的网站怎么建设wordpress qqoq主题