《C++ primer plus》第13章 类继承1

preview
需积分: 0 0 下载量 42 浏览量 更新于2022-08-03 收藏 384KB PDF 举报
《C++ Primer Plus》第13章主要讨论的是C++中的类继承,这是面向对象编程的一个核心概念。类继承允许我们基于已有的类创建新的类,新类(派生类)继承了旧类(基类)的特征,包括数据成员和成员函数。以下是关于这个主题的详细讲解: 1. **类继承** - **公有派生**:如果一个类声明为另一个类的子类,使用`public`关键字,那么基类的公有和保护成员将成为派生类的公有和保护成员。私有成员虽然不能直接访问,但可以通过基类的公有和保护接口进行间接访问。 - **构造函数**:派生类的构造函数必须调用基类的构造函数,通常通过成员初始化列表来完成。基类对象被创建,然后初始化派生类新增的数据成员。 2. **继承关系与多态** - **is-a关系**:公有继承体现了“is-a”关系,意味着派生类是基类的一种形式。 - **多态**:多态是指同名方法在不同上下文中的行为可能不同。C++实现多态的两种主要方式是:覆盖基类的方法(重定义)和使用虚函数。 - **虚函数**:虚函数使用`virtual`关键字声明,使得程序根据实际对象类型而非指针或引用类型来决定调用哪个方法。这在动态联编中至关重要。 - **虚析构函数**:确保正确调用析构函数序列,即使通过基类指针操作派生类对象,也需要析构函数为虚的。 3. **静态联编与动态联编** - **静态联编**:编译时确定函数调用,效率高,用于非虚函数。 - **动态联编**:运行时确定函数调用,与虚函数相关。向上强制转换(基类到派生类)无需显示转换,而向下强制转换(派生类到基类)需要显示转换。 - **虚函数表**:每个含有虚函数的对象都有一个隐藏的虚函数表,存储函数的地址。 4. **访问控制** - **protected成员**:类似于private,但派生类可直接访问,不能从类外部访问。 - **数据成员和成员函数**:通常,数据成员设为private,成员函数设为protected或public,以控制访问权限。 5. **抽象基类** - **纯虚函数**:声明为`=0`的虚函数,使得包含纯虚函数的类成为抽象基类,不能实例化。 6. **继承与内存管理** - **动态内存**:派生类使用`new`时,需要自定义析构函数、复制构造函数和赋值运算符,以处理基类的动态内存。 - **友元函数**:若需访问基类成员,友元可能需要显式类型转换。 7. **类设计原则** - **默认构造函数**:无参数或所有参数有默认值。 - **复制构造函数**:用于复制对象。 - **赋值运算符**:处理对象赋值。 - **构造函数**:非继承的,每个类都有自己的构造函数。 - **析构函数**:处理动态内存分配,基类应有虚析构函数。 - **转换函数**:定义转换为其他类型,可以使用`explicit`关键字防止隐式转换。 类继承和多态是C++中强大的工具,它们允许我们构建复杂、灵活的软件结构,同时保持代码的可复用性和模块化。理解这些概念并熟练应用是成为专业C++程序员的关键。