帮忙解释一下此程序的结果?

来源:百度知道 编辑:UC知道 时间:2024/06/23 08:55:53
#include<iostream>
using namespace std;
class base{
public:
virtual void print() const {cout<<"base::f()"<<endl;}
};

class derived:public base {
public:
virtual void print() const {cout<<"derived::f()"<<endl;}
};
void print(const base& obj)
{
obj.print();
}

int main()
{
base* pb1=new derived();
print(*pb1);
base* pb2=new base(*pb1);
print(*pb2);
base b=base(derived());
print(b);
delete pb1;
delete pb2;
return 0;
}
结果为什么是
derived::f()
base::f()
base::f()

第一行输出是调用derived类的print函数没什么好解释的;

第二行:一个derived是一个base,反之不成立,这是继承的基本含义,所以base(*pb1)会把一个derived对象转化成一个base对象;

第三行输出也是一样的道理.

这个还是你看看书吧

关于类的继承与虚函数