c++新人想问下关于虚基类和虚函数的问题

Jay_xin 2018-05-21 10:41:57
#include <iostream>
using namespace std;
class Base
{
public:
Base(int m){n=m++;}
virtual void g1(){cout<<"Base::g1()..."<<n<<endl;g4();}
virtual void g2(){cout<<"Base::g2()..."<<++n<<endl;g3();}
void g3(){cout<<"Base::g3()..."<<++n<<endl;g4();}
void g4(){cout<<"Base::g4()..."<<++n<<endl;}
protected:
int n;
};
class Derive:public Base
{
public:
Derive(int n1,int n2):Base(n1){j=n2;}
void g1(){cout<<"Deri::g1()..."<<++n<<endl;g2();}
void g3(){cout<<"Deri::g2()..."<<++n<<endl;g4();}
private:
int j;
};
int main(){
Derive Dobj(1,0);
Base Bobj=Dobj;
Bobj.g1();
cout<<"------------------"<<endl;
Base *bp=&Dobj;
bp->g1();
cout<<"------------------"<<endl;
Base &bref=Dobj;
bref.g1();
cout<<"------------------"<<endl;
Dobj.g1();
return 0;
}

以上是代码,想问下他的结果是怎么个调用方式调用出来的啊,感觉个人思路有点乱
...全文
957 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
紫火桑葚 2018-05-25
  • 打赏
  • 举报
回复
概念都没弄清,建议先了解下,虚函数和虚函数表,重载,继承,好好看书啊亲!
冷风1023 2018-05-22
  • 打赏
  • 举报
回复
虚基类是防止基类多实例化,虚函数是调用指针和引用指向的原型成员函数。
  • 打赏
  • 举报
回复
这里讲解很麻烦,也不好讲清楚,总体来生说,记住一点:多态跟类型无关,跟对象有关,Bobj.g1(); 这条语句没有构成多态,因为不是指针或引用调用g1,(多态的条件:1,虚函数重写,2基类指针或者引用调用虚函数); Base *bp=&Dobj; bp->g1(); 这条语句构成多态,bp是基类指针,指向子类对象,所以调用的子类中的函数。 Base &bref=Dobj; bref.g1(); 这条语句也构成多态,bref是基类类型的引用,直接引用子类对象,所以调用子类中函数。 Dobj.g1(); 这是正常语句,Dobj是子类对象,子类对象调用子类函数;
真相重于对错 2018-05-21
  • 打赏
  • 举报
回复
你的代码有问题
Jay_xin 2018-05-21
  • 打赏
  • 举报
回复
没问题吧,是可以输出的啊

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧