gpt4 book ai didi

c++ - 查询类的静态成员变量

转载 作者:行者123 更新时间:2023-11-28 00:13:26 26 4
gpt4 key购买 nike

我用这种方式定义的类很少:

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_SockWorkingCSocket 的 protected 成员,由 CSocketClient 继承,这使其成为 CApi 上下文中的私有(private)变量 和您的应用程序。因此,您可以通过使用访问器和修改器函数来访问它。

每个 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
};

ma​​in.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

关于c++ - 查询类的静态成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31868722/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com