谭浩强-《C++面向对象》读书笔记5

本文详细介绍了C++中常对象的概念及其使用限制,包括如何定义常对象及常成员函数,以及如何通过构造函数初始化常数据成员。此外,还讲解了静态数据成员的特点及其在类中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常对象

常对象必须有初值。

常对象中的非const型的成员函数(除了由系统自动调用的隐式的构造函数和析构函数)不能被调用。在常对象中的数据成员定义前加上mutable 就可以被修改了,如mutable int count;

 

 

常对象成员

只能通过构造函数的参数初始化表对常数数据成员的初始化。

在类外定义构造函数,应写出:

Time:::Time(int h):hour(h){};

常成员函数只能引用本类中的数据成员,而不能修改它们。

void get() const ;//const是函数类型的一部分。

 

 

数据成员                 非const成员函数               const成员函数

非const的数据成员     可以引用,也可以修改        可以引用,但不可以修改

Const数据成员         可以引用,但不可以修改      可以引用,但不可以修改

Const对象的数据成员   不允许                      可以引用,但不可以修改

注意:常成员函数不能调用另一个非const 成员函数

 

定义指向常变量的指针的一般形式:

Const 类型名 *指向变量名

(1)       如果一个变量已经被声明为常变量,只能使用指向常变量的指针指向它。

(2)       指向常变量的指针可以指向常变量也可以指向非const变量,但是不能通过此指针来改变变量的值。

(3)       如果函数的形参是指向非const型变量的指针,实参也只能是指向非const变量的指针,而不能用指向const变量的指针(参考第一条)

 

形参                       实参              合法否      改变指针所指向变量的值

指向非const型的变量的指针    非const变量的指针   合法     可以

指向非const型的变量的指针    const变量的地址     非法      /

指向const型的变量的指针      const变量的地址      合法     不可以

指向const型的变量的指针       非const变量的指针   合法     不可以

 

一个变量的引用就是变量的别名。引用名和变量名指向同一段内存单元。调用函数就是把实参的地址传给形参。

 

对象的动态建立和释放

Box *p = new Box ;//成功就返回一个指向Box的指针,失败返回0

delete p ;释放

 

对象的赋值: 对象名1 = 对象名 2;

对象的复制:类名  对象2(对象1);//复制对象1产生新对象2

或者:类名 对象2 = 对象1;

 

静态数据成员

在类中使用static 定义,静态数据成员的值对所有对象都是一样的,所有对象是共享的。

(1)       静态数据成员不属于某个对象,为对象所分配的空间不包括静态数据成员所占的空间。静态数据成员是单独开辟的,即使没有定义对象也存在分配空间。

(2)       静态数据成员的空间一直到程序结束才释放空间。

(3)       静态数据成员的初始化只能在类体外进行。

一般初始化形式为:数据类型  类名::静态数据成员名 = 初值

如:int Box::height = 10;

不需要加static。

如果未初始化,则自动赋值为0.

(4)       静态数据结构可以通过类名引用也可以通过对象名

对象名。数据成员名

类名::数据成员名

(5)       静态数据成员只作用于该类的作用域

静态成员函数:static int get();//注意没有this指针

静态成员函数不能访问非静态数据成员。

Cout<<height<<endl;  //height为static ,所以引用合法

Cout<<width<<endl;  //width不为static ,所以引用不合法

应该为Cout<<a。width<<endl;

 

养成好习惯:只用静态成员函数访问静态数据成员,不引用非静态数据成员

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值