查询类的静态成员变量
Query on Static member variables of a class
我用这种方式定义了几个类:
class CSocket {
protected:
int m_SockWorking;
int InitSocket();
void CleanSocket();
}
class CSocketClient : public CSocket {
public:
CSocketClient();
int InitClient();
}
class CApi {
static CSocketClient c1;
public:
// other methods defined
}
现在,在主例程中,我创建了两个类CApi
的对象。我知道,对于静态成员变量,每个类只存在一个副本。但是,我如何访问CSocketClient
成员变量的m_SockWorking
变量呢?这两个对象是否有该非静态成员变量的两个副本?有人能解释一下吗? 所有CApi
类将共享一个静态CSocketClient
变量。
m_SockWorking
是CSocket
的受保护成员,由CSocketClient
继承,这使得它成为CApi
和应用程序上下文中的私有变量。因此,您可以通过使用访问器和mutator函数来访问它。
每个CSocketClient
都有自己的m_SockWorking
变量。由于所有CApi
都共享相同的CSocketClient
类,它们都共享相同的m_SockWorking
变量。
CSocket.h
class CSocket {
protected:
int m_SockWorking;
int InitSocket();
void CleanSocket();
public:
void setSocket(int val){ m_SockWorking = val; } /* added these functions to show how to accessing m_SockWorking can be done */
int getSocket() const { return m_SockWorking; }
};
class CSocketClient : public CSocket {
public:
CSocketClient();
int InitClient();
};
class CApi {
static CSocketClient c1;
public:
// other methods defined
};
main.cc
#include "CSocket.h"
#include <iostream>
using std::cout;
using std::endl;
int main(){
CApi a, b;
CSocketClient c2;
a.c1.setSocket(0); /* sets static c1 m_SockWorking variable to 0 */
cout << b.c1.getSocket() << endl; /* will print 0 since c1 is a static variable */
c2.setSocket(1); /* set c2 m_SockWorking to 1 */
cout << c2.getSocket() << endl; /* will print 1 */
cout << a.c1.getSocket() << endl; /* will print 0 */
}
0
1
1
是的,对象c1是唯一的,因此,c1中的所有数据成员对于CApi都是唯一的。
也许这样更容易理解:
静态对象c1是一个独立的&"CLASS"CApi的唯一对象,可由CApi的对象访问。它属于类,而不属于CApi的任何对象;
相关文章:
- C++:是否可以使用非静态成员变量模板?
- 如何在复杂继承中访问静态成员变量
- 静态成员变量不会由 gettext 转换
- 未使用的C++未优化的静态成员函数/变量
- 为什么我不能像这样在静态成员函数中调用静态成员变量?
- C++ lambda - 捕获静态成员变量
- 多线程处理中的静态成员变量
- 纯标头库中静态成员变量的正确设置器和 getter
- 如何从具有专用化的类模板定义静态成员变量?
- 从静态成员函数访问私有非静态类变量 - C++
- 静态变量与静态成员
- 为什么可以在没有实例变量的情况下访问静态回调方法中的静态成员变量?
- 声明和定义类静态成员变量不会导致多重声明,这是为什么?
- 为什么不允许静态成员变量的初始化在类中,而允许静态静态成员的初始化
- 类中的静态成员变量和C++中的全局变量有什么区别?
- 获取 constexpr 全局变量(不是静态成员)的链接器符号
- C++ 静态成员变量 - 文件之间的访问
- 将非静态成员函数C 的使用无效,而将成员功能作为函数变量
- 如何在运行时使用静态成员函数初始化静态成员变量
- 如何在类静态成员中引用静态变量?