(C++笔记)第二十三节课:继承与多态

本文详细介绍了C++中的继承原理,包括类型兼容性原则,子类对象可以作为父类对象使用,以及多继承的概念和实现。同时探讨了多继承可能遇到的二义性问题和解决方法,如虚继承。此外,文章还讲解了虚函数和多态的机制,强调了虚析构函数的重要性,以及如何利用dynamic_cast和typeid进行动态类型识别。最后,介绍了纯虚函数和抽象类的应用。

# 一 继承

## 1.1 继承中的类型兼容性原则


概念:类型兼容性原则是指在需要基类对象的地方,我们都可以直接使用公有派生类对象,通过公有继承,我们可以得到基类中除了构造函数,析构函数外的所有成员,这样,凡是基类可以解决的问题,派生类都可以解决。

(1)子类对象可以当成父类对象使用,子类对象是一种特殊的父类。
(2)父类指针可以直接指向子类对象
(3)父类引用可以直接引用派生类对象
 


#include <iostream>
using namespace std;
class Parent
{
    protected:
        int m_a;
        int m_b;
    public:
        Parent()
        {
            cout<<"Parent的无参构造函数"<<endl;
        }
        Parent(const Parent &obj)
        {
            cout<<"Parent的拷贝构造函数"<<endl;
            m_a = obj.m_a;
            m_b = obj.m_b;
        }
        void SetAB(int a,int b)
        {
            m_a = a;
            m_b = b;
        }
        void print()
        {
            cout<<"m_a = "<<this->m_a<<endl;
            cout<<"m_b = "<<this->m_b<<endl;
        }
};
class Child:public Parent
{
private:
    int m_c;
public:
    void SetC(int c)
    {
        this->m_c = c;
    }
    void printC()
    {
        cout<<"c = "<<m_c<<endl;
    }
};
int main(int argc, char const *argv[])
{
    /*
    Parent p1;
    p1.SetAB(1,2);
    p1.print();
    */
    Child c;
    c.SetAB(10,20);
    c.SetC(30);
    c.print();
    c.printC();

    //Child *pc = &c;
    //Parent *p = &c;
    //p->SetAB(1,2);
    //p->SetC(20);

    Parent &p = c;
    p.printC();
    return 0;
}

## 1.2 多继承

### (1) 概念


派生类中如果只有一个基类,称为单继承,除此之外,c++中还支持多继承,每一个派生类可以继承多个基类。
 

(2)多继承的语法


用逗号将继承的基类隔开。

#include <iostream>
using namespace std;
class AirPlane
{
    protected:
        int high;
    public:
        AirPlane()
        {
            cout<<"飞机的构造函数"<<endl;
            high = 100;
        }
        void show()
        {
            cout<<"飞机的高度:"<<high<<endl;
        }
};
class Ship
{
    protected:
        int speed;
    public:
        Ship()
        {
            cout<<"轮船的构造函数"<<endl;
            speed = 40;
        }
        void show()
        {
            cout<<"航行的速度:"<<speed<<endl;
        }
};
class WaterPlane:public Ship,public AirPlane
{

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值