作业帮 > 综合 > 作业

c++ 课本上的一句话我看不懂

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/04/28 14:51:43
c++ 课本上的一句话我看不懂
在对类的静态私有数据成员初始化的同时,还可以引用类的其他私有成员.
例如,如果一个类T 存在类型为T的静态私有对象,那么可以引用该类的私有构造函数将其初始化.
这个问题怎么说呢
首先 明确一下
class T{
private:
static T a;
};
这里的static T a 和static int a 是一样的东西 ——类T的静态数据成员
那么既然是私有的 静态数据成员变量
在内存里 静态变量存放在静态存储区.放在静态存储区的数据在整个程序运行其间持续有效
你可以把静态成员变量看做是一个作用域是类的范围内的全局变量
#include "stdafx.h"
#include
using namespace std;
class T{
public:
int a;\x05T(){a=0;}
T(){};
int getb(){return b.suma();}
private:
static T b;
int suma(){a=(b.a+1) ;return a;}
};
T T::b;//利用T类的构造函数初始化了静态成员b
int _tmain(int argc,_TCHAR* argv[])
{int x,y;
cin>>x;
T *c=new T(); //当我们创建了T的一个实例c时 我们可以发现c的静态私有成员b的情况 b的公有成员a的值已被初始化为0 当我们调用 c的公有函数 getb时 getb调用了b私有成员suma对b的公有成员a加了1并且返回a的值
x=c->getb();
couty;
return 0;
我想这个例子能够大概说明白吧~
再问: 1 T 类里面又有 T类的对象 这样可以吗 我都快晕了 2 T T::b;//利用T类的构造函数初始化了静态成员b , 是不是说 无论T是否有实例化, T b 都会被初始化?
再答: 1你不要把b看做是个什么神奇的东西 他和static int xx 是一样的地位 就是一个静态的私有成员 2 静态的私有成员就是类的一个属性 而不是依赖于对象而存在的 抱歉前面这一句 /当我们创建了T的一个实例c时 我们可以发现c的静态私有成员b的情况 b的公有成员a的值已被初始化为0 我貌似说的不准确 静态成员变量他并不是对象的一个属性而是类的一个属性 你可以把他想成是一种全局的变量 即使你建n个对象 对这些变量内的成员做处理 静态成员变量也不会因为其中任何一个对象的改变而变 也不会因为任何一个对象的释放而销毁 静态数据成员的初始化必须在类外 然后初始化是程序一开始就进行的 你可以假如断点 你会发现T T::b;是在main之前就进行了的 所以b这个对象就是main开始前 就被创建了 而当程序结束时才释放 3 最后你再来考虑b的内部 他只是比int复杂了一点 是一个有结构的类T的对象 而不是一个32位只存放一个二进制数的内存空间