【问题标题】:About static data members.关于静态数据成员。
【发布时间】:2015-10-14 19:16:31
【问题描述】:

这是我的头文件,但我不理解静态数据成员的功能,如果我将它们声明为私有或公共,则输出保持不变。静态数据成员如何工作。

class cDate        

{

private:

int day;       
int month;  
int year;   
bool valid;   
bool validate();   
bool IsLeapYear() const;   
**static char strMON[12][4];   
static char strMONTH[12][10];**

public:   

cDate(int d = 1, int m = 1, int y = 2000);
cDate(cDate & src);
~cDate();
void print(int option) const;
void ReadFromKB();


void setDay(int d);
void setMonth(int m);
void setYear(int y);
void setDate(int d, int m, int y);


int getDay() const;
int getMonth() const;
int getYear() const;
};

【问题讨论】:

  • 一些指导:使用std::vector而不是原始数组和指针;使用std::string 而不是char 的数组;考虑更改命名约定,以便客户端代码读取良好(仅使用day())而不是实现代码读取良好。
  • 对于不起作用的代码,请提供一个完整但最小的示例供读者尝试。
  • @Noman 您是否尝试过同时处理多个cDate 实例?
  • 我有实现文件,其中包含所有函数的实现,但我的问题只是关于静态数据成员,如果我将它们声明为公共或可能是私有的,则对我的输出没有影响。为什么还是一样?

标签: c++ static-members


【解决方案1】:

静态数据是类变量而不是实例变量;它与修饰符无关

例如

class ABC {
static int a;
int b;
}

现在创建两个A类对象并赋值

ABC a1= 新 ABC(); ABC b1 = 新的 ABC();

所以在这种情况下,a1 和 b1 都具有 'a' 的相同副本,因为它属于 class 和 shareable ,因此 a1 对 'a' 变量的任何更改也将反映 b1 对象的更改,反之亦然。

【讨论】:

  • 意味着如果我将它们声明为公共或可能是私有的,则没有任何效果。因为静态数据是类变量,所以类的所有成员都可以访问它们,或者所有对象都有相同的副本。
  • @Noman - 对于不属于 ABC 对象的任何代码,仍然存在声明公共或私有 ... 的“效果”。
【解决方案2】:

当您将类的数据成员声明为静态时,这意味着无论创建多少类对象,静态成员都只有一个副本。它将被该类的所有对象共享。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    • 2013-01-10
    • 1970-01-01
    • 2021-09-10
    相关资源
    最近更新 更多