【C++】类和对象期末复习笔记(一)

引言:

马上就是期末周了,为了复习巩固C++的内容,就做点笔记回顾一下知识点吧。

正文:

1、什么是类和对象?
对象是对客观事物的抽象,可以说是类的变量,类是对对象的抽象,是一种抽象的数据类型。对象是类的实例,类是对象的模板

2、类的三个基本特征
封装、继承、多态

3、面向过程和面向对象的区别
面向过程:程序=函数+调用
面向对象:程序=对象+交互

4、类的数据成员的三种访问权限
1)私有(private):只允许类内成员函数存取它
2)保护(protected):允许类内和其他派生类函数存取它
3)公有(public):只允许类内和类外函数存取它

5、封装是将对象的属性(静态的和动态的)组装成一个整体即“类”,类中的数据成员(静态)通常是私有的,在类内可直接访问,类外不行,所以一般将类的数据成员定义为private或protected的。

6、类外定义成员函数
需要使用“ :: ”符号,说明是该类的成员,例:

char Person::GetSex()
{
	return Sex;
}

int Person::GetAge()
{
	return Age;
}

7、访问类的成员的两种方法
假设有一个类Person,则在main( )函数中创建两个对象,开一个数组辅助作用。

Person a, *pa;
char name[20];

1)通过对象访问成员

a.SetData("Cheng", "F", 20);
a.GetName(name);

2)通过指针访问成员

pa=&a;          //pa指向a的地址
pa->SetData("Zhang", "A", 18)
pa->GetName(name);

8、对象可以整体赋值

r1.print();
r2=r1;
r2.print();

9、对象占用的存储空间有多大呢?
系统会为每个对象分配存储空间,用于存放该对象具体的数据成员值;所有对象的成员函数的代码一样,因此系统将成员函数的存储空间处理成该类的所有对象共享同一代码空间。因此一个对象的存储空间是对象自身数据成员的存储空间

10、对象存储空间的分配和撤销是系统根据对象的作用域自动完成的(new和delete除外)。

11、类中数据成员的类型
1)基本数据类型:整型、实型、字符型
2)构造数据类型:数组类型、指针类型、引用类型、结构体类型
3)已定义的“类”类型:结构体类型

例:

class Person
{
	char name[20];    //构造类型,对 
	char sex;         //基本类型,对 
	int age;          //基本类型,对 
	Date d1,d2;       //已定义类的对象,对 
	Date *pd;         //已定义类的指针,对 
	Person *pa;       //自身类指针,对 
	Person &r;        //自身类引用,对 
	Person a,b;       //自身类对象,错错错错错 
};

PS:自身类的指针或引用可以作为类的成员,但自身类的对象不可以作为成员。

11、当定义了一个类时使用了另一个类,且这个类的定义在当前类的后面,则必须对另一类作引用性说明(类似函数声明)。

12、定义类的对象的三种方法
1)先定义类,后定义对象

class Date
{
	......	
};
Date d1,d2,d3;

2)定义类的同时定义对象

class Date
{
	......
}d1,d2,d3;

3)定义无类名的对象

class 
{
	......
}d1,d2,d3;

13、结构体和类的区别
结构体是类的特例,结构体中成员的默认访问权限是公有的,而类中成员的默认访问权限是私有的。

14、一般不会将类的数据成员定义为公有的。

15、对象的私有数据成员在定义时不能通过赋初值的方式初始化。

16、构造函数
1)构造函数是成员函数,可以在类体外和类体内定义
2)重载构造函数:定义多个构造函数
3)特点:函数名与类名相同,且无返回值类型
4)创建对象时,系统自动调用构造函数
5)一般将构造函数定义为公有成员函数
6)不能通过对象名调用构造函数

例:d1.Date(2021);

7)可以通过构造函数名调用构造函数创建对象

例:d1=Date(2021);

17、析构函数
1)析构函数是成员函数,可以在类体外和类体内定义
2)一般将构造函数定义为公有成员函数
3)析构函数前面要加“ ~ ”
4)析构函数无参数,且无返回值类型
5)一个类只能定义一个析构函数,即析构函数不可重载
6)析构函数一般由系统在撤销对象时自动调用,有两种情况:

①当对象是系统自动创建的,则在对象的作用域结束时,系统自动调用析构函数
②若一个对象是使用new运算符动态创建的,则在使用delete运算符撤销它时自动调用析构函数

PS:当类中有动态申请的存储空间时,必须显式定义析构函数,以撤销动态存储空间。

18、缺省构造函数
1)缺省构造函数也叫默认构造函数,是指在定义对象时,若不给初值(即构造函数的实参),则系统使用默认值初始化数据成员
2)缺省构造函数的两种形式:

①所有参数均带有缺省值的构造函数
②没有参数的构造函数

3)若编程者没有自行定义构造函数,则编译器自动生成一个缺省构造函数
4)一个类中只能有一个缺省构造函数

19、拷贝构造函数
1)作用:用一个已知对象初始化一个新创建的同类对象
2)形式:

ClassName::ClassName([const] ClassName &Obj)
PS:
①形参Obj是实参对象的引用,即它是实参对象的别名。
②const表示形参Obj在拷贝构造函数的函数体中是对象常量(常对象),不能被修改,以保护实参对象。

3)拷贝构造函数的函数名与类名相同,且无返回值类型
4)拷贝构造函数只有一个参数,必须是本对象的引用,一般是常引用
5)每个类一定有一个拷贝构造函数,若编程者在定义类时没有定义拷贝构造函数,则系统自动产生一个拷贝构造函数,称为缺省拷贝构造函数
6)若类的数据成员需要动态申请存储空间,则必须定义拷贝构造函数

20、类的成员函数
1)内联函数:在类体内定义的成员函数
2)外联函数:在类体外定义的成员函数

PS:在类体外也可以定义内联函数,在函数定义的首部加inline关键字即可。

3)内联函数一定要在调用之前定义,且内联函数不能递归调用
4)内联函数在类体外的定义也称为内联函数的实现
5)内联函数的代码量较大,但是提高了运行效率;外联函数的代码量虽小,但效率低。所以一般只有当函数体较小的情况下才声明为内联函数。

21、若没有人为对对象成员初始化,系统将自动调用缺省构造函数对其初始化。

22、this是一个隐含于成员函数中的特殊指针,指向调用成员函数的当前对象。
例:

class Sample
{
	int x,y;
public:
	Sample(int a=0, int b=0)
	{
		x=a;       //等价于this->x=a; 
		y=b;       //等价于this->y=b; 
	} 
	void Print()
	{
		cout<<x;   //等价于cout<<this->x; 
		cout<<y;   //等价于cout<<this->y; 
	}  
};

PS:
①C++ 规定,在非静态成员函数内部可以直接使用 this 关键字,this 就代表指向该函数所作用的对象的指针。
②友元函数没有 this 指针,因为友元不是类的成员。只有成员函数才有 this 指针。

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值