C++继承的基本意义

一、继承的本质和原理

继承的本质:
a. 代码的复用;
b. 在基类中给所有派生类提供统一的虚函数接口,让派生类进行重写,然后就可以使用多态了。
类和类之间的关系:
组合:a part of… 一部分的关系
继承:a kind of… 一种的关系
在这里插入图片描述
总结:

  1. 外部只能访问对象public的成员,protected和private的成员无法直接访问。
  2. 在继承结构中,派生类从基类可以继承过来private的成员,但是派生类却无法直接访问。
  3. protected和private的区别?
    在基类中定义的成员,想被派生类访问,但是不想被外部访问,那么在基类中,把相关成员定义成protected保护的;
    如果派生类和外部都不打算访问,那么在基类中,就把相关成员定义成private私有的。
  4. 默认的继承方式是什么?
    要看派生类是用class定义的,还是struct定义的。
    class定义派生类,默认继承方式就是private私有的。
    struct定义派生类,默认继承方式就是public私有的。
  5. 派生类从继承可以继承来所有的成员(变量和方法),除过构造函数和析构函数
  6. 派生类怎么初始化从基类继承来的成员变量呢?答:通过调用基类相应的构造函数来初始化。
  7. 派生类的构造函数和析构函数,负责初始化和清理派生类部分
    派生类从基类继承来的成员的初始化和清理由谁负责呢?是由基类的构造和析构函数来负责。
  8. 派生类对象构造和析构的过程是:
    1.派生类调用基类的构造函数,初始化从基类继承来的成员;
    2.调用派生类自己的构造函数,初始化派生类自己特有的成员;
    …派生类对象的作用域到期了
    3.调用派生类的析构函数,释放派生类成员可能占用的外部资源(堆内存,文件);
    4.调用基类的析构函数,释放派生类内存中,从基类继承来的成员可能占用的外部资源(堆内存,文件)。
#include <iostream>
using namespace std;

class Base {
   
public:
	Base(int data)
		: ma(data) 
	{
   
		cout << "Base()" << endl;
	}

	~Base() {
   
		cout << "~Base()" << endl;
	}
protected:
	int ma;
};

class Derive : public Base {
   
public:
	Derive(int data)
	//: ma(data) //"Base":没有合适的默认构造函数可用
	: Base(data)
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值