C++ 虚函数 多态的实现

C++之所以叼,厉害,其中一个原因是他可以轻松的实现多态功能
提到多态,脑海里飘过老师上课时的一句话:
“简单的来说,多态就是通过父类指针和引用可以调用子类的函数,实现多态必须有这几个条件 
     1》父类的此函数(发生多态的)必须有 virtual 关键字修饰
     2》子类必须继承父类
     3》子类必须重写父类的发生多态的函数”

举个栗子:
    class A
    {
        public:
            virtual void func()            //有关键字irtual修饰
            {
                cout<<"A::func()"<<endl;
            }
    };
    
    class B : public A
    {
        public:
            void func()        //virtual
            {
                cout<<"B::func()"endl;
            }
    };
    
    int main01(void)
    {
        A *a = new B();        
        
        a->foo();            //通过指针调用
        
        delete a;
        return 0;
    }
    
out : B::foo() function            
    
    int main02(void)
    {
        B b;
        A &a = b;
        
        a.foo();        //通过引用调用
        return 0;    
    }
out : B::foo() function     
这个就发生多态了,利用父类的指针调用子类的函数,是不是很厉害,就是前人写的代码可以调用后人的代码

觉得这个还好的话看看下边这个栗子,是我第一次接触工作的时候,在公司看到技术大牛写的 ,就模拟一下调用关系
class Father
{
    protected:
        virtual void func()
        {
            cout<<"I am Father class"<<endl;
        }
    public:
        void TestFunc()
        {
            func();
        }
};

class Child : public Father
{
    protected:
        virtual void func();
        {
            cout<<"I am Child class"<<endl;
        }
    public:
        int start()
        {
            TestFunc();        //注意,这是调用的父类的函数
            return 0;
        }
};

int main(void)
{
    Child ch;
    ch.start();
    
    return 0;
}
out :  I am Child class            

最后聊聊纯虚函数:纯虚函数是在基类中定义的虚函数而不去实现但是在子类中必须实现的函数叫纯虚函数,有纯虚函数的类叫
做抽象类,没什么高深的,大家不要被唬住
举个栗子:
class Father
{
    public:
        virtual void fun() = 0;
};

class Child : public Father
{
    //如果要实例化一个子类的对象,那么,子类必须实现父类的虚函数,
} 

抽象类不能直接实例化对象,必须通过子类来实例化对象

                                                                    记录学习C++的路









转载于:https://my.oschina.net/lcg521521/blog/666469

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值