052day(静态成员)
来源:互联网 发布:条数计算java 编辑:程序博客网 时间:2024/06/10 03:45
172210704111-陈国佳总结《2017年12月1日》【连续052天】
标题:静态成员;
内容:A.静态成员:
static 变量/函数;
静态成员变量只有一份,为所有对象共享;
sizeof 运算符不会计算静态成员变量。(sizeof(类)没有计算),(因为静态成员变量可以看作是所有对象之外的变量);
静态成员函数并不具体作用于某个对象。
静态成员不需要通过对象进行访问;
B.访问静态成员:
1)类名::成员名
2)对象名.成员名 //与对象无关
3)指针->成员名 //与指针指向的对象无关
4)引用.成员名 //与引用的对象无关
C.基本概念:
静态成员变量本质上是全局变量,与对象存在与否无关;
静态成员函数本质上是全局函数。
D.示例:
设置一个可以随时知道矩形总数和总面积的图形处理程序;
class CR
{
private:
int w,h;
static int nTotalArea;
static int nTotalNumber;
public:
CR(int w_,int h_);
~CR();
static void PrintTotal();
};
CR::CR(int w_,int h_)
{
w=w_;h=h_;
nTotalNumber ++;
nTotalArea +=w*h;
}
CR::~CR()
{
nTotalNumber --;nTotalArea -=w*h;
}
void CR::PrintTotal()
{
cout<<nTotalNumber<<","<<nTotalArea<<endl;
}
int CR::nTotalNumber=0;
int CR::nTotalArea=0;
int main()
{
CR r1(3,3),r2(2,2); //cout<<CR::nTotalNumber; wrong,私有
CR::PrintTotal();
r1.PrintTotal();
return 0;
}输出:2,13
2,13
注意:静态成员函数不能访问非静态成员函数变量,也不能调用非静态成员函数:(无法解释变量所属的对象)
注:上述的程序有严重缺陷:
由于我们为定义复制构造函数,所以编译器会自动生产缺省的复制构造函数,该复制构造函数只完成复制工作;
但:调用一个以CR类对象作为参数或返回值的函数时,会通过复制构造函数生产一个临时的CR对象,
生产时,总数和总面积无变化,但消亡时,会调用析构函数,减少总的量;
因此,我们在这种情况下,会得到比实际值小的量;
自己写一个使增加总数和总面积的复制构造函数即可;
明日计划:成员对象和封闭类;
- 052day(静态成员)
- 静态成员(转)
- C++静态成员与静态成员函数小结 (转载)
- 为什么静态成员不能访问非静态成员(原理)
- 静态成员函数调用非静态成员变量(转)
- 静态成员(变量、函数)
- C++静态成员(静态成员数据和静态成员方法)浅析
- C++静态成员(静态数据成员和静态成员函数)
- C++静态成员(静态数据成员和静态成员函数)
- 静态成员
- 静态成员
- 静态成员
- 静态成员
- 静态成员
- 静态成员
- 静态成员
- 静态成员
- 静态成员
- 单链表相关操作的C++实现
- 洗牌算法
- 链表的逆序输出
- 算法分析与设计回溯法之n皇后问题
- 《数学之美》第三章 统计语言模型
- 052day(静态成员)
- 学习计划
- 使用RxJava的retryWhen操作符实现token过期自动刷新
- python入门第一天——控制流
- 复制状态机(State Machine Replication)
- 在Ubuntu 16.04配置VNC Server (灰屏问题解决)
- Monitor项目开发走过的路~子线程Toast全解析
- JavaScript--函数声明、函数表达式、匿名函数、立即执行函数
- 到底怎么做需求分析,技术调研,技术设计?