一 对象的初始化、复制和销毁
1.对象的初始化和销毁
对象初始化:初始化不是赋值,初始化是在创建一个对象时赋予其一个初始值,而赋值是用一个新值去替换原有的值。大致有四中初始化方式,即默认初始化,直接初始化,拷贝初始化,列表初始化。不同的初始化形式意味着要调用不同的构造函数。
2.默认构造函数
可以不提供实参就能调用的构造函数称为默认构造函数。通常要为类定义一个默认构造函数,在定义对象时如果没有提供初值,会调用默认构造函数进行初始化。
3.析构函数
析构函数执行与构造函数相反的操作。析构函数释放对象使用的资源,并销毁对象的非static数据成员。析构函数在大多数情况下都是被自动地隐式调用。
二 运算符重载
1.重载运算符概念
运算符可以看做一种特殊的函数:操作数是函数的参数,运算结果是函数的返回值。如果将运算符看作函数,那么其可以像函数一样重载。
2重载运算符方法
重载的运算符有特殊的名字,由关键字operator和其后要定义的运算符共同组成。和其他函数一样,重载的运算符也包含返回类型,参数表以及函数运算符。
重载函数的语法为:
函数类型 operator 运算符(形参表)
{
函数体;
}
运算符重载为类的友元函数的语法为:
friend 函数类型 operator 运算符(形参表)
{
函数体;
}
三 组合与继承
1.组合
对象成员语法也被称作组合或包含,将已有类的对象作为成员,可以通过成员对象使用已有类的功能,复用其实现。
2.继承
一种复用已有类的机制,在已有类的基础上继承得到新类,这个新类型自动拥有已有类的特性,并可以修改继承到的特性或者增加自己的新特性。被继承的已有类称为基类,继承得到的新类称为派生类。
继承语法:
class 派生类名字 : [访问限定符]基类名字
{
成员声明;
};
定义派生类时可以指定访问限定符public、 protected、private。
如果不希望一个类被其他类继承,可以在类名后面跟一个关键字final。
构造函数,析构函数,赋值运算符函数不能继承。
复用基类的构造函数:在派生类定义中提供一条using声明(Using 基类名::基类名)
派生类可以复用基类的构造函数,同时定义自己的一部分构造函数。如果派生类定义的构造函数与基类的构造函数有相同的参数列表,则不会继承基类的这个构造函数,在派生类中定义的构造函数将替换继承到的基类构造函数。
在派生类中重新定义基类中的同名成员后,原来基类中的名字在派生类中被隐藏。
四 虚函数与多态性
1.虚函数:基类希望派生类覆盖的函数。
基类在成员函数声明语句之前加上virtual关键字使得该函数执行动态绑定。语法形式:virtual 返回类型 成员函数名(参数表);
在派生类中可以重新定义基类的虚函数,这称为覆盖。
2.多态性:同一操作在不同场景下的不同效果。
多态性可以为程序带来更大的灵活性和可扩展性。