c++期末复习总结类与对象

2023-12-18 18:06:13

类与对象

  • 类的定义:

类一般的定义格式为说明实现两个部分(关键词class <类名>,类名首字母大写)

类是抽象的名词,不是具体的对象,系统不分配空间,定义时不能对其数据成员赋值

public ?公有的 可以在类外访问

private 私有的 只能在类的内部使用,或友元函数访问

protect 受保护的

域限定符 ::和类名一起使用,用来识别某个成员

成员访问符 . 和类的实例化对象一起使用,用来访问谋个成员

定义在类内部的函数自动作为内联函数,或者定义在函数外部的加inline关键词

Get和set函数

Get_<函数名>(),set_<函数名>

类名 对象名字 系统会分配一些空间存储

类名* 对象名字 对象指针系统不分配空间

  • 构造函数

构造函数名与类名相同

构造函数名之前没有返回类型

构造函数可以被重载,可以一个或多个参数,也可有默认参数

构造函数有系统默认构造

通常构造函数具有public属性

如果没有定义系统默认生成缺省函数

缺省函数 无构造函数时系统创建的默认public无参数

注意点:

函数二义性:即定义了无参构造,又在带参数是定义了参数默认值

若定义参数时有默认参数定义,该参数后边所有参数都应该有默认值

成员对象的构造函数

若类中有成员函数,则创建该类时需要先执行成员对象的构造函数

初始表对类成员对象进行初始化?<类的名字><类的构造函数>(参数x):<对象的名字>(参数x)

拷贝构造函数:

用已存在的对象去创建另一个对象,两个对象的数据成员值完全一样

系统会自动生成调用,但是拷贝的对象中有指针成员时,要注意指针悬挂问题

声明格式<函数名>(函数名 &) ?<函数名>(const 函数名&)

被调用的时机

用以一个对象去创建另一个对象

对象作为实参传递给形参

对象作为返回值

析构函数

析构函数名称前~

无参数

无返回值

一个类只有一个无法被重载

只能系统自动调用

可以自定义自己的析构函数

对象的生命周期结束系统调用析构函数:

函数中定义了对象,函数执行结束系统会自动调用

具有static静态属性的对象,main函数结束时调用

全局对象 main结束时调用

New动态创建的对象需要delete运算符释放对象时调用

先创建的函数后释放,函数运行在栈区

全局对象的构造函数,在main函数前被执行 ?(全局对象main函数之前创建的变量)

局部对象的创建,创建时调用,调用结束时析构

函数中定义了静态局部对象,程序执行时调一次,调用结束不释放,在main函数结束后调用析构函数

对象数组

类名 <对象那个数组名>[下表表达式]

可以使用new动态创建对象数组

类类型的参数类型

This指针

类的每一个对象都有自己的数据成员,有多少数据成员就有多少数据拷贝,类的的成员函数只有一份拷贝,无论调用那个对象都调用的这一个

This指针指向当前对象的数据成员

This不能修改const修饰的成员

常成员

Const修饰符

定义常对象

类名 Const 对象名字

对象名 const 类名

常引用作为形参时不能对实参进行修改(一般引用可以)

常数据成员

Class 类名{const 数据类型 数据};

常数据成员任何函数成员都不能对该成员进行赋值操作,常数据成员的只能在构造函数的初始化列表位置进行初始化

必须进行初始化且不能被更新

常成员函数使得数据的访问只限于可读(出现在形参列表后)不能更改数据

常成员的数据访问通常使用常成员函数来实现

常成员函数可以访问类的const和非const的数据成员,但是不能修改他们

常成员函数不可调用非const成员函数,this指针为常量型,const修饰的区别于非修饰的重名函数,是函数重载

静态常数据成员,遵循静态数据的特点,须在类外单独定义

例如static const int x

在类外const int 类名::x==20

常对象只能调用常成员函数,常成员函数是为了常对象而准备的

常数据函数的使用规则:

部分不能改变

所有的数据不能改变

定义常对象

友元函数

非成员函数,一般类中声明,类外定义

可以放在类的任意位置声明

可以通过对象名访问类的所有成员,包括私有的

可以将一个类的成员函数声明为另一个类的友元函数

Friend 返回值类型 类名::函数名();

构造函数、虚函数、析构函数不能声明为友元函数

文章来源:https://blog.csdn.net/toptopniba/article/details/135062432
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。