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

本文详细介绍了C++中构造函数与析构函数的概念及其使用方法,包括构造函数的重载、默认参数设置,以及析构函数的作用与执行时机等关键知识点。

9 章 关于类和对象的进一步讨论

对象的初始化不能在声明类的时候,如果一个类的所有成员都是公用的,就可以在定义对象的时候初始化。C++使用构造函数来初始化对象。构造函数可以定义在声明的类体中,也可以在类体中声明,在类外定义,由建立对象时自执行的。如果不定义构造函数,在建立对象时也会自动调用一个构造函数,但是不起任何的作用。构造函数没有返回值,所以不需要声明类型。不能被用户调用。

构造函数和类名相同。

带参数的构建函数

这时构造函数的格式:

  构造函数名 (类型1 形参1, 类型2 形参2 , 。。。)

定义对象:

  类名  对象名 (实参1 , 实参2,。。。);

 

用参数初始化表对数据成员初始化:

Box::Box(int h, int w, int len):height(h),width(w),length(len){}

意义就是:height = h;width = w;length = len;

 

构造函数重载

无参的构造函数默认的构造函数,尽管一个类可以定义多个构造函数,但是只会执行一个构造函数。使用方法:

在类中声明两个构造函数:

Box()   //无参

Box(int h ,int w, int len):height(h),width(w),length(len){}  //没有分号

在类外定义:

Box::Box()

{height = 10;

 width = 10;

length = 10;

 

}

 

使用默认参数的构造函数

如 Box(int h = 10,int w = 10, int len = 10);//这时在类体中的声明。

在一个类中定义了全部默认参数的构造函数后,不能再定义重载构造函数。

 

析构函数

析构函数的名是在类名前加一个“~”符号。对象的生命周期结束时,会自动执行析构函数。析构函数的作用不是删除对象,而是在撤销对象占用的内存之前完成一些清理工作。析构函数没有返回值,没有参数,没有函数类型。一个对象只能有一个析构函数,这和构造函数不同。如果没有定义,编译系统会自动生成一个析构函数,但是没做什么工作而已。

一般情况下是先构造的后析构,后构造的先析构。必须注意的是,析构函数时在对象从内存撤销的时候才自动执行的。

 

对象数组

注意对象数组的初始化

Box  a[3] = {

Box (10, 12, 15),    //以逗号分隔

Box(11,13,14),

Box (16,20,26)

};  //有分号

 

指向对象的指针

类名 *对象指针名

对象空间的起始地址就是对象的指针。P为指针。

(*p)。stu  和p->stu  的意义是一样的。

 

指向对象成员的指针

定义指向对象数据成员的指针变量的一般定义:

数据类型名 * 指针变量名

int *p = & t1.hour ;//对象t1中的hour成员

 

指向对象成员函数的指针:

1.       定义 :数据类型名 (类名::*指针变量名)(参数表列);

2.       赋值:指针变量名 = &类名::成员函数名

如:void (Time::*p)();

p=&Time::gettime;

也可以合为一行:void (Time::*p)()=&Time::gettime ;

 

this指针是编译系统自动实现的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值