C++面向对象程序设计(谭浩强)阅读笔记2——类和对象

1.对象的两个要素:属性attribute(静态特征)+行为behavior(动态特征)。

2.对象的两个组成:数据+函数。

注意:

stud是对象,

display( )是方法,

语句“stud.display( );”是消息。

3.对象的两个特点:封装性(encapsulation)+信息隐蔽(information hiding)。

!4.抽象:类是对象的抽象,而对象则是类的特例(具体表现形式)。

5.重要特性:继承、重用(reusability)、多态性(polymorphism)。

6.程序=对象s+消息。

7.类的声明:类头+类体。类与结构体的区别:不作声明时,类默认成员private,结构体默认成员public。

8.类的成员函数:public、private、protected.在类外定义成员函数——使用作用域限定符“::”。为减少调用成员函数时间,可以inlie成员函数(内置函数)。

9.成员函数的储存:一个对象所占空间的大小,只取决于该对象中数据成员所占的空间,与成员函数无关;任何声明方式下的成员函数都不占用对象的存储空间。

10.对象成员的引用:1)对象名.成员名;2)指针访问;3)引用

11.对象的初始化:1)类的数据成员是不能在类声明时初始化的。2)若一个类中所有成员都是public,则可以在定义对象时进行初始化(与结构体类似)。例如                

class Time 
{public : //声明为公用成员
 hour;
 minute;
 sec; 
};
Time t1={14,56,30}; //将t1初始化为14:56:30

但是当类中存在private成员函数时,则不能用这种方法初始化。当然可以调用成员函数来对对象中的数据成员赋值,但较为繁琐。

12.构造函数处理对象的初始化:1)函数名与类名相同,类内、类外都可以。它不具有任何类型,不返回任何值。2)构造函数不能被调用;3)在类对象进入其作用域时调用构造函数。4)可以使用带参数的构造函数实现对不同的对象进行不同的初始化。——还可以运用参数初始化表实现对函数成员的初始化。

13.使用默认参数的构造函数以及函数重载:1)声明构造函数时指定默认值;2)一个类只能有一个默认构造函数;3)在一个类中定义了全部是默认参数的构造函数后,不能再定义重载构造函数。

14.析构函数:1)当对象的生命期结束时,会自动执行析构函数。具体情况有:

①如果在一个函数中定义了一个对象(它是自动局部对象),当这个函数被调用结束时,对象应该释放,在对象释放前自动执行析构函数。

②static局部对象在函数调用结束时对象并不释放,因此也不调用析构函数,只在main函数结束或调用exit函数结束程序时,才调用static局部对象的析构函数。

③如果定义了一个全局对象,则在程序的流程离开其作用域时(如main函数结束或调用exit函数) 时,调用该全局对象的析构函数。

④如果用new运算符动态地建立了一个对象,当用delete运算符释放该对象时,先调用该对象的析构函数。


2)析构函数不返回任何值,没有函数类型,也没有函数参数。析构函数不能被重载。一个类可以有多个构造函数,但只能有一个析构函数。

15.调用构造函数和析构函数的顺序

(1在全局范围中定义的对象(即在所有函数之外定义的对象),它的构造函数在文件中的所有函数(包括main函数)执行之前调用。

但如果一个程序中有多个文件,而不同的文件中都定义了全局对象,则这些对象的构造函数的执行顺序是不确定的。

main函数执行完毕或调用exit函数时(此时程序终止),调用析构函数。

(2如果定义的是局部自动对象(例如在函数中定义对象),则在建立对象时调用其构造函数。

如果函数被多次调用,则在每次建立对象时都要调用构造函数。

在函数调用结束、对象释放时先调用析构函数。

(3如果在函数中定义静态(static )局部对象,则只在程序第一次调用此函数建立对象时调用构造函数一次,在调用结束时对象并不释放,因此也不调用析构函数,只在main函数结束或调用exit函数结束程序时,才调用析构函数。

16.对象指针:1)定义:a.如果构造函数只有一个参数:Student stud[3]={60,70,80}//合法,三个实参分别传递给3个数组元素的构造函数;b.如果构造函数有多个参数,则定义如下:

Student Stud[3]={ //定义对象数组
Student(1001,18,87), //调用第1个元素的构造函数,为它提供3个实参
Student(1002,19,76), //调用第2个元素的构造函数,为它提供3个实参
Student(1003,18,72) //调用第3个元素的构造函数,为它提供3个实参
};
17.对象指针:1)对象空间的起始地址就是对象的指针。2)形式:类名 *对象指针名;

可以通过对象指针访问对象和对象的成员。例如:

(*pt).hour                  pt所指向的对象,即t1。
pt->hour                    pt所指向的对象中的hour成员,即t1.hour
(*pt).get_time ( )          pt所指向的对象中的hour成员,即t1.hour 调用pt所指向的对象中的get_time函数,即t1.get_time 调用
pt->get_time ( )            pt所指向的对象中的get_time函数,即t1.get_time 

18.指向对象成员的指针

1)定义指向类对象指针变量的一般形式:数据类型名 *指针变量名;2)定义指向公用成员函数的指针变量的一般形式:数据类型名(类名::*指针变量名)(参数列表);

3)使得指针变量指向一个公用函数的一般形式为:指针变量名=&类名::成员函数名;

19.this指针:它是指向本类对象的指针,它的值是当前被调用的成员函数所在的对象的起始地址。

20.公用数据的保护:关于常对象:a.定义:类名 const对象名[(实参列表)]或者 const 类名对象名[(实参列表)];

21.静态成员:静态数据成员+静态成员函数。

22.友元:友元函数+友元类

23.关于类模版。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值