一.static成员

(1)static数据成员

static数据成员的创建是为了对象之间的共享和沟通,具有以下特点:

1.1 static数据成员属于类,只占一份空间(不像普通数据成员每个对象中都有一份数据),其空间在对象之外,但可以被各个同类对象共享。

1.2 static数据成员不能通过构造函数初始化(这是因为static数据成员只有一份数据,而每实例化一个对象就会执行一次构造函数),只能在类外初始化(编译器默认赋其为0)。

一般形式为:数据类型 类名::静态数据成员 = 初值;//不加static修饰。加粗处为与全局变量定义的不同点。

1.3 声明类时静态数据成员已经被分配空间(早于对象的构造),到程序运行结束才释放(晚于对象的析构)。

1.4 被定义成public数据成员时,在main函数内既可以通过类名来引用,也可以通过对象来引用。

1.5 static数据成员可以被static成员函数和非static成员函数所引用。

1.6 类的static数据成员和它所有派生类对象也是共享的。

(2)static成员函数

小叙this指针:

 class A
{
public:
int i;
void display();
};
void A::display()
{
cout<<i<<endl;
} int main(void)
{
A a1;
A a2;
a1.i = ;
a2.i = ;
a1.display();
a2.display();
}
display();<=>display(A* const this);//指向谁在函数内不能变,指向的对象值在函数内可以变。

对象a1和a2各有一份数据成员i,而成员函数只有一份供共用。成员函数怎么选择显示哪个i呢?

这里成员函数所隐含的形参-本类对象指针this发挥了作用。对象在调用成员函数时,会把自身地址传递给this指针,然后由this去引用数据成员。

a1.display();<=>a1.display(&a1);

结束小叙。

普通成员函数被每个对象共享且属于每一对象,故成员函数有指向该对象的this指针,可以访问普通数据成员。

静态成员函数被每个对象共享但不属于任一对象,故静态成员函数没有指向该对象的this指针,不可以访问普通数据成员。

这是静态成员函数和普通成员函数的根本区别。

二. const成员

const的意思,就是不可以被改变或不可以改变。

(1)const数据成员

const数据成员具有以下特点:

1.1 不能被改变,不能被赋值。

1.2 只能通过构造函数的参数初始化表进行初始化。

Time::Time(int h):hours(h){}

(2)const成员函数

类型名 函数名(参数表) const;//定义时也加const

2.1 const成员函数隐含形参(const 类名* const this)。

指向谁在函数内不能变,指向的对象值在函数内也不能变。

2.2 可以引用对象的所有数据成员,但不可以改变。

2.3 不允许其调用普通成员函数(为了防止const成员函数通过普通成员函数改变数据成员)。

(3) const对象

类名 const 对象名(实参);<=>const 类名 对象名(实参);

const对象的数据成员都是,const数据成员。

1.1 必须有初值。

1.2 只能通过构造函数的参数初始化表进行初始化。

1.3 只能调用const成员函数(调用普通成员函数,隐形指针传递非法--参考谭浩强C++,解释在上)。

1.4 被声明为mutable的数据成员,可以通过(const对象)调用const成员函数修改值。

说明:由于const成员函数有this指针,而static成员函数没有this指针,故这两个关键词不能同时修饰一个成员函数。

C++中static与const成员的更多相关文章

  1. PHP5中Static和Const关键字

    (1) static static要害字在类中是,描述一个成员是静态的,static能够限制外部的访问,因为static后的成员是属于类的,是不属于任何对象实例,其他类是无法访问的,只对类的实例共享, ...

  2. C++中static、const使用方法简介

    众所周知,在c++中,static和const的使用方法是难点,也是重点,值得我们随时温习,所谓温故而知新是也. 下面我们首先说一说static. 1.static的作用 static变量的作用,主要 ...

  3. C++ 中 static 与 const 的用法及对比

    在这个学习过程中我对 static 及 const 的使用时常会混淆,因此整理,加深记忆 一.类的静态成员 如果某个属性为整个类所共有,不属于任何一个具体对象,则采用 static 关键字来声明静态成 ...

  4. C++ —— 类中static和const关键字声明变量的初始化方式总结

    在类中声明变量/常量时,经常会用到static.const关键字.对于该变/常量的初始化问题,网上有许多相关文章,但是大多不够完善,或者存在错误.经过实际验证,总结如下: (注明:测试编译平台为VS2 ...

  5. C++中static和const关键字的作用

    static关键字至少有下列几个作用: 函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值: 在模块内的static全局变量 ...

  6. c++类的 static 和const那些事

    1.static成员变量(非const)必须在类外定义,在类中只是作为声明(声明其scope为该类),不能使用类初始化成员列表来初始化,只能在定义的时候初始化. 2.static const的成员变量 ...

  7. C++ 的static 与 const

    1.static成员变量(非const)必须在类外定义,在类中只是作为声明(声明其scope为该类),不能使用类初始化成员列表来初始化,只能在定义的时候初始化. 2.static const的成员变量 ...

  8. 为什么const对象只能调用const成员函数,而不能调用非const成员函数?

    在c++中,我们可以用const来定义一个const对象,const对象是不可以调用类中的非const成员函数,这是为什么呢?下面是我总结的一些原理. 假设有一个类,名字为test代码如下: clas ...

  9. 第24课经典问题(中)-----关于const对象的疑问

    关于const对象的疑问const关键字能否修饰类的对象?如果可以,有什么特性?const关键字能够修饰对象const修饰的对象为只读对象只读对象的成员变量不允许被改变.(对象是只读的,成员变量不允许 ...

随机推荐

  1. Keras之函数式(Functional)模型

    函数式(Functional)模型 我们起初将Functional一词译作泛型,想要表达该类模型能够表达任意张量映射的含义,但表达的不是很精确,在Keras2里我们将这个词改移为“函数式”,函数式模型 ...

  2. tomcat访问管理页面出现:403 Access Denied 解决方法

    点击红色框框出现以下403错误 打开context.xml文件 vim /usr/local/tomcat/webapps/manager/META-INF/context.xml <Conte ...

  3. [cocos2dx笔记006]流格式日志

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zdhsoft/article/details/36001945 在cocos2dx 2.2.2版本号 ...

  4. springcloud Hystrix fallback无效

    在使用feign调用服务的时候防止雪崩效应,因此需要添加熔断器.(基于springboot2.0) 一.在控制器的方法上添加  fallbackMethod ,写一个方法返回,无须在配置文件中配置,因 ...

  5. POS杂项数据SAP记账程序

    *&---------------------------------------------------------------------* *& Report ZDQFI_904 ...

  6. 简单的 H5 视频推流解决方案

    导语 随着直播平台爆发式增长,直播平台从 PC 端转战移动端,紧跟着直播的潮流,自己学习实现了一套简单的 H5 视频推流的解决方案,下面就给小伙伴们分享一下自己学习过程中的经验. 环境部署 1. 配置 ...

  7. 理解display中的box-flex属性

    今天有个同学在面试的时候碰到了使用css2和css3实现一种页面布局,要求页面效果如下: 在实现这种页面布局时,他使用了display:box-flex,下面是相应的代码: css2 方式 <! ...

  8. ubuntu 16.04安装navicat for mysql

    下载地址:官网https://www.navicat.com/download 1.下载 navicat120_mysql_en_x64.tar.gz 文件  2.下载后移到/opt/下 3.解压ta ...

  9. SQL SERVER 索引中聚集索引分析和Transact-SQL语句优化

    一. 聚集索引B树分析1.聚集索引按B树结构进行组织的,索引B树种的每一页称为一个索引节点.B树的顶端节点称为根节点.  索引中的低层节点称为叶节点.根节点与叶节点之间的任何索引级别统称为中间级.在聚 ...

  10. DATEDIFF() 返回2个日期之间的间隔

    SELECT DATEDIFF(day,'2008-12-29','2008-12-30') AS DiffDate 解释: 第一个参数 day 表示 返回2个日期间隔的 个间隔类型 是 日期:结果 ...