static成员与const方法(十五)
来源:互联网 发布:淘宝我的五星好评截图 编辑:程序博客网 时间:2024/06/05 07:28
1、static修饰类的成员包括成员数据和成员函数
static修饰成员数据,则该成员数据属于类而不属于某个对象,所以具有一下性质:
(1)初始化时不能在构造函数中初始化,只能在类外部以Test::data=0的形式初始化,因为它不属于对象,而构造函数是创建对象才会调用的函数;
(2)静态成员数据属于类,所以成员函数可以使用静态成员数据,如构造函数中的count++,析构函数中的count--等
(3)在访问该静态成员数据时可以通过类作用域访问,如Test::data,也可以通过任一对象访问,如t.data,因为每个对象都保存了对静态成员数据索引。
static修饰成员函数,则该成员函数具备两个属性,一是可以访问类中的私有成员(只限于静态成员);二是static成员函数属于类的作用域。所以,static成员函数有以下性质:
(1)static成员函数的调用不是通过对象激活的而是通过类来激活,因为该函数不会转换为含有this指针函数;
(2)static成员函数只能调用static静态成员数据而不能调用普通成员数据,因为它没有this指针,而普通的成员函数即可以调用普通成员数据也可以调用static成员数据。
对于普通成员函数即可以访问普通成员数据,也可以访问静态成员数据。
普通成员方法能够调用静态成员方法,而静态成员方法不能调用普通成员方法,只能调用静态成员方法。
实例如下:
#include <iostream>
class Test{
public:
Test(int d=0):data(d){
count++;
}
~Test(){
count--;
}
void show(){
std::cout<<data<<std::endl;
std::cout<<count<<std::endl;
}
static void static_show(){
//std::cout<<data<<std::endl;
std::cout<<count<<std::endl;
}
private:
int data;
static int count;
};
//initialization
int Test::count = 0;
#include <iostream>
#include "static_const.h"
int main(int argc, char **argv){
Test t1;
Test t2(100);
t1.show();
Test::static_show();
return 0;
}
二、const应用
public:
void list(){
std::cout<<"this is list()"<<std::endl;
}
void list()const{
std::cout<<"this is list()const"<<std::endl;
}
在类中添加了一个普通方法,添加了一个常方法。一个函数的const既可以修饰参数,也可以修饰函数,还可以修饰返回值。对于修饰参数是保护参数参数在函数中不被修改。对于修饰函数称为常方法,它修饰的*this,即该方法不能改变整个类的数据成员。即const Test * const this。普通方法有一个const只封锁了this不变,而常方法还修饰了*this为常量,所以不能修改成员数据。
原则:方法如果不改变数据,尽可能定义为常方法,否则不能定义。 一般方法能够调用常方法,而常方法不能调用一般方法。
- static成员与const方法(十五)
- static与const成员变量
- const成员函数与static成员函数
- static修饰类数据成员 与 static const数据成员
- static const、static、const成员
- const static与类的数据成员,成员函数,对象
- const/static 成员函数
- const成员 和 static成员
- const static 与static const const static
- const 成员 static 成员 const static int 成员初始化
- const 成员 static 成员 const static int 成员初始化
- 初始化const, static, const static, static const成员变量
- 初始化const, static, const static, static const成员变量
- static,const,static const , const static成员初始化
- const static与相关成员变量的初始化
- static 与static const
- 类的const static成员
- C++中static const成员
- 20170918心情总结
- 字节数组转16进制输出
- 每日一点C语言--蛇形填数
- Java1.7快速排序算法
- Mushroom的区间 (并查集)
- static成员与const方法(十五)
- Win10 Vs2017 环境下 C ++调用tensorflow模型
- C++虚表
- redis
- Unity隐身 观察隐身
- 《Java与模式》学习笔记(连载中...)
- git撤销删除分支操作
- python基础一
- JavaScript 标准参考教程(alpha)