首页 > 编程 > C++ > 正文

C++读书笔记之类的继承1(第十三章)

2019-11-06 08:01:10
字体:
来源:转载
供稿:网友

1、派生类的对象存储了基类的数据成员。派生类对象可以使用基类的方法。

2、继承特性中派生类要添加什么? (1)派生类类需要有自己的构造函数 (2)派生类可以添加成员或方法 (3)构造函数必须给新成员和继承的成员提供数据

3、关于构造函数访问权限的考虑

(1)今天在书上看到一个关于构造函数为什么不能被继承的原因。

构造函数不同意其他类方法,因为它创建新的对象,而其他类方法只有被现有的对象调用。这是构造函数不能被调用的原因之一。继承意味着派生类对象可以使用基类的方法,然而,构造函数在完成其工作之前,对象并不存在。

(2)派生类不能直接访问基类的私有成员,而必须通过基类方法来进行访问,导致派生类构造函数必须调用基类构造函数。

有关派生类构造函数要点如下: (1)首先创建基类对象 (2)派生类构造函数通过成员初始化列表来将基类信息传递给基类构造函数。 (3)派生类构造函数应该初始化新增的数据成员。

#include <iostream>using namespace std;class Base{public: Base() { cout << "base " << endl; } ~Base() { cout << "base destory" << endl; } void PRint() { cout << "Base print" << endl; }};class Derived : public Base{public: Derived() { cout << "Derived " << endl; } Derived(int x):dd(x),Base() { cout << dd << endl; } ~Derived() { cout << "deriverd destory" << endl; }private: int dd;};int main(){ Derived temp(5); return 0;}

【注意】:创建派生类时,程序首先调用基类的构造函数,在调用派生类的构造函数。基类构造函数负责初始化继承的数据成员;派生类构造函数主要用于初始化新增的数据成员。派生类的构造函数总是调用一个基类的构造函数。可以使用初始化列表指明要使用的基类构造函数,否则将使用默认的基类构造函数。

(3)派生类和基类的特殊关系

派生类可以使用基类的方法基类指针或者引用可以在不进行显示类型的情况下指向或引用派生类

基类指针或引用只能调用基类方法,不可以基类对象或者地址赋值给派生类引用和指针。

4、继承 c++继承的三种方式:公有继承、私有继承、保护继承 继承时is-a的关系,即派生类对象时基类的一个对象。

5、多态公有继承

两种重要的机制实现公有继承: (1)在派生类中重新定义基类方法 (2)使用虚方法

书中关于使不使用virtual的解释: (1)如果方法是通过引用或者指针而不是对象调用的,没有使用virtual,它将根据引用类型或者指针类型选择方法。 如果使用virtual,程序将根据引用或者指向的对象的类型,选择方法。

(2)如果方法在基类中被声明为虚之后,它在派生类中自动成为虚方法。

【注意】:如果在派生类中重新定义基类的方法,通常应将基类方法声明为虚的。

6、静态联编和动态联编。 静态联编:在编译阶段就已确定的调用的方法 动态联编:在程序执行阶段才确定要使用的方法(virtual是动态联编)

7、虚函数的注意事项

(1)构造函数不能是虚函数 (2)友元不能是虚函数,因为友元不是类成员,而只有成员才能是虚函数。 (3)没有重新定义,将使用基类版本。 (4)重新定义将隐藏方法

8、当类声明中包含纯虚函数时,则不能创建该类的对象。 包含纯虚函数的类只能用在基类。

9、继承和动态分配内存

基类中有new (1)派生类中没有使用new,派生类调用基类的析构函数、拷贝构造函数】赋值运算符 (2)派生类中使用new ,必须显示定义析构函数,拷贝构造函数,赋值运算符


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选