在c++中,为什么会输出这样的结果呢?看不懂这个程序,请高手帮忙看看

2025-05-21 07:53:12
推荐回答(2个)
回答(1):

由于基类B定义的fun()是虚函数,所以Iclass继承的fun()同样是虚函数,
虚函数的作用是实现多态,虚函数是后绑定原则,即在函数运行中确定地址,而不是在编译的时候确定。
对应各自类的地址,由于是虚函数,p1对应Bclass,p2取了obj(即lclass)的地址,p3同p2。

回答(2):

#include
using namespace std;
class Bclass //基类
{ public:
Bclass(int i,int j ) { x = i; y = j; }
virtual int fun() {return 0 ; }
protected:
int x, y ;
};
class Iclass:public Bclass //派生类
{ public :
Iclass(int i, int j, int k):Bclass(i, j) { z = k; }
int fun() { return( x + y + z ) / 3; }
private :
int z ;
};
int main()
{ Iclass obj( 2, 4, 10 ); //创建派生类类对象obj
//并对其构造函数Iclass(int i, int j, int k):Bclass(i, j) { z = k; }定义
Bclass p1 = obj; //虚函数,楼上有讲
//p1就是基类
cout < Bclass &p2 = obj; // 引用p2用obj初始化,反正p2就是obj,即派生类
cout < cout << p2.Bclass:: fun() << endl; //派生类调用基类版本同名函数
//即virtual int fun() {return 0 ; }
Bclass *p3 =&obj; //指针,不懂网上查,p3指向obj
cout << p3-> fun() << endl; //执行int fun() { return( x + y + z ) / 3; }
}