虚函数(运行期绑定)_skybeauty_新浪博客


注意:主函数在调用的时候必须生成基类的指针,必须生成虚函数,并且子类要重写基类的函数,只要基类的函数是虚函数,子类的函数不需要加关键词virtual,构造函数不能成为虚函数,析构函数可以成为虚函数

#include

using namespace std;

class A

{

private:

   int x;

public:

  virtual  void set()

    {

        cout<<"A类的虚成员函数被调用"<<"\n";

        

        

    }

    

};

class B:public A

{

private:

   int x;

public:

 virtual void set()

    {

        cout<<"B类的虚成员函数被调用"<<"\n";


    }


};

class C:public A

{

private:

   int x;

public:

 virtual  void set()

    {

        cout<<"C类的成员函数被调用"<<"\n";

    }


};

int main(int argc, const char * argv[])

{


    // insert code here...

   A *a;

    a= new A;

    a->set();

    

    a = new B;

    a->set();

    

    a=new C;

    a->set();

    

    std::cout << "Hello, World!\n";

   return 0;

}






#include <iostream>

using namespace std;

class A

{

private:

   char * x;

public:

    A()

    {

       static int i=0;

        i++;

        cout<<"A类的构造函数被调用第"<<i<<""<<"\n";

       x=new char[5];

    }

  virtual ~A()

    {

       static int j=0;

        j++;

        cout<<"A类的析构函数被调用第"<<j<<""<<"\n";

       delete []x;

 

    }

    

};

class B:public A

{

private:

   char * q;

public:

    B()

    {

       static int i=0;

        i++;

        cout<<"B类的构造函数被调用第"<<i<<""<<"\n";

     q=new char[500];

    }

  virtual  ~B()

    {

       static int j=0;

        j++;

        cout<<"B类的析构函数被调用第"<<j<<""<<"\n";

       delete [] q;


        

    }



};

void f()

{

   A *a;

    a=new B();

   delete a;

}

int main(int argc, const char * argv[])

{


    // insert code here...

   for(int i=0;i<3;i++)

    {

       f();

    }

    

    std::cout << "Hello, World!\n";

   return 0;

}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值