C++复习——多态

先说什么是静态类型和动态类型。静态类型是变量声明时的类型或表达式生成时的类型,编译时已知;动态类型是变量或表达式表示的内存中的对象的类型,运行时才可知。

C++多态性的实现方法:在基类的函数前加上virtual关键字,在派生类中重写该函数,通过基类的指针或引用调用虚函数时,如果指针或引用所指对象是派生类,就调用派生类的函数;如果所指对象是基类,就调用基类的函数。

例:

#include<iostream>

using namespace std;

class automobile
{
public:
    virtual void My_name()
    {
        cout<<"this is automobile"<<endl;
    }
};

class car:public automobile
{
public:
    void My_name()
    {
        cout<<"this is car"<<endl;
    }
};

int main()
{
    car CAR;
    automobile AUTO;
    automobile *p_automobile=&CAR;
    automobile *pp_automobile=&AUTO;
    p_automobile->My_name();
    pp_automobile->My_name();
    return 0;
}

输出为:

this is car

this is automobile

如果基类没有加virtual,则变成普通的类型转换,将派生类的对象地址复制给指向基类的指针时,调用的只是基类的构造函数,故基类指针中只保留派生类中基类部分的内容。

例:

#include<iostream>

using namespace std;

class automobile
{
public:
    void My_name()
    {
        cout<<"this is automobile"<<endl;
    }
};

class car:public automobile
{
public:
    void My_name()
    {
        cout<<"this is car"<<endl;
    }
};

int main()
{
    car CAR;
    automobile *p_automobile=&CAR;
    p_automobile->My_name();
    return 0;
}

此时输出:

this is automobile

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值