c++类相关

定义抽象数据类型

类的基本思想是数据抽象和封装。数据抽象是一种依赖于接口和实现的分离编程技术。
定义在类内部的函数是隐式的inline函数。

this

任何对类成员的直接访问都被看做this的隐式调用。this形参是隐式定义的。this是常量指针,不允许改变this中保存的值。
c++允许把const关键字放在成员函数的参数列表之后,紧跟在参数列表后面的const表示this是一个指向常量的指针,像这样使用const的成员函数被称作常量成员函数。
*this表示解引用this指针,获得执行该函数的对象。
常量对象,常量对象的引用或指针只能调用常量成员函数。

类作用域和成员函数

类本身就是一个作用域。类成员函数的定义嵌套在类的作用域之内
在类外部定义成员函数,定义必须与声明匹配,返回类型,参数列表和函数名都得一致。类外部定义的成员名字必须包含它所属的类名。

定义返回this对象的函数

将返回类型定义为引用。函数体内返回*this,即返回调用该函数的对象。
IO类属于不能被拷贝的类型,所以只能通过引用传递它们:istream &is;
ostream &os

构造函数

每个类定义了它的对象被初始化的方式。构造函数的任务是初始化类对象的数据成员。
构造函数和类名相同。构造函数没有返回类型,有参数列表和函数体。类可以有多个重载的构造函数。
构造函数不能被声明成const。
默认构造函数不需要任何实参。
如果存在类内的初始值,用它来初始化成员。
否则默认初始化该成员。
默认构造函数只适合简单的类,普通的类必须定义自己的默认构造函数。
只有当类没有声明任何构造函数(默认、拷贝)时,编译器才会自动生成默认构造函数。
如果类包含有内置类型或复合类型的成员,只有当这些成员全都被赋予类内初值,这个类才适合合成的默认构造函数。
如果需要默认的行为,可以通过参数列表后面写上=default要求编译器生成构造函数。
构造函数初始值列表,负责为新创建的对象的一个或几个数据成员赋初值。构造函数初始值是成员名字的一个列表,每个名字后面紧跟括号括起来的成员初始值,不同成员初始值通过逗号分隔。

访问控制与封装

一个类可以包含多个访问说明符,出现次数也可以随意,每个访问说明符指定了接下来的成员访问级别,有效范围直到出现下一个访问说明符。
struct默认访问权限是public
class默认访问权限private
class和struct唯一区别就是默认访问权限。

友元

类可以允许其他类访问它的非公有成员,要在类内以friend关键字开始的函数声明语句。
一般在类定义开始或结束位置集中声明友元

类的其他特性

定义在类内部的成员函数自动inline。

可变数据成员

即使在一个const成员函数内,可以通过在变量声明中加入mutable关键字来实现对数据成员的修改。
可变数据成员永远不会是const,即使是const对象的成员。因此,const成员函数可以改变可变成员的值。

类内成员初始值

默认情况下,希望类开始拥有默认初始化的值,最好方式是把默认值声明成一个类内的初始值。类内初始值必须使用=或者花括号括起来。
如果当初定义的返回类型不是引用,则返回值是*this的副本。
一个const成员函数如果以引用的形式返回 *this,那么它的返回类型是常量引用。
一个类的成员不能是类自己,类允许包含指向自身类型的引用或指针。
friend class 类名。将类声明为友元类,可以访问包括非公有成员在内的所有成员。
每个类负责控制自己的友元类或友元函数。
friend 类型 类名::函数。令成员函数成为友元。

类的作用域

构造函数再探

构造函数的初始值有时候必不可少:如果成员是const或者是引用,必须将其初始化。当成员属于某种类类型且类没有定义默认构造函数,也必须将这个成员初始化。
建议使用构造函数初始值而不是先初始化再赋值。
成员初始化的顺序:构造函数初始化列表不限定初始化的具体执行顺序。成员初始化顺序与它们在类定义中的出现顺序一致
委托构造函数:通过冒号实现委托。
转换构造函数
关键字explicit只对一个实参的构造函数有效。只允许出现在类内的构造函数声明处。
使用explicit关键字声明构造函数时,只能以直接初始化的形式使用,不能将explicit构造函数用于拷贝形式的初始化过程。

类的静态成员

声明静态成员:static。静态成员可以是public或private。静态成员的类型可以是常量,引用,指针,类类型。
静态成员函数也不与任何对象绑定,不含this指针,静态成员函数不能声明为const,也不能在函数体内使用this指针。
类的静态成员不应该类的内部初始化,但可以为静态成员提供const整数类型的类内初始值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值