返回信息流class BASE
{
public:
unsigned int a;
BASE(){a = 3;}
int GetValue(){ return --a;}
};
class Derived: public BASE
{
public:
virtual int GetValue(){return ++a;}
};
class Derived2: public Derived
{
public:
int GetValue(){return a*2;}
};
void main()
{
Derived2 *pderived2 = new Derived2;
Derived2 & derived2 = *pderived2; //derived2是对象,还是指针呢?在vs2008里derived2后面只能接.不能用->,感觉像是对象。如果是对象的话,是不是会调用Derived2的拷贝构造函数,生成一个新的对象呢?
Derived *pderived1 = pderived2;
Derived & derived1 = *pderived1; //
BASE *pbase = pderived1;
BASE & base = *pbase; //
base.GetValue();
derived1.GetValue();
derived2.GetValue();
printf("%d", base.GetValue());
getchar();
}
求达人指点一下注释中的话,谢谢!
这是一条镜像帖。来源:北邮人论坛 / cpp / #45229同步于 2010/10/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
[求助]今天在微软笔试的时候看到的一条定义,不解,求达人指点
KilltheThree
2010/10/24镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
// 引用.cpp : 定义控制台应用程序的入口点。
//
#include<iostream>
using namespace std ;
class BASE
{
public :
unsigned int a ;
BASE()
{
a = 3 ;
cout<<"BASE Constructor !"<<endl;
}
int GetValue()
{ return --a ; }//a=2
};
class Derived:public BASE
{
public :
Derived()
{
cout<<"Derived Constructor!"<<endl;
}
virtual int GetValue()
{ return ++ a ; }//a=4
};
class Derived2:public Derived
{
public :
Derived2()
{
cout<<"Derived2 Constructor!"<<endl;
}
int GetValue()
{ return a * 2 ; }//a=6
};
int main()
{
Derived2 *pderived2= new Derived2 ;//pderived是Derived2的对象指针
//Derived2派生于Derived,所以在构造Derived2之前首先构造Derived
//而Derived是派生于BASE,所以在构造Derived之前首先构造BASE
//所以先调用BASE构造函数,再调用Derived构造函数,最后才调用Derived2的构造函数
Derived2 & derived2 = *pderived2 ;//derived是Derived对象(*pderived2)的引用
Derived *pderived1 = pderived2 ;//将Derived2的对象指针(pderived2)赋给它的父类(Derived)的对象指针pderived1
Derived & derived1 = *pderived1 ;//将对象(*pdrived1)赋给Derived的对象引用derived1
BASE *pbase = pderived1 ;//将Derived的对象指针(pderived1)赋给它的父类(BASE)的对象指针(pbase)
BASE &base = *pbase ;//将BASE的对象(*pbase)赋给BASE对象引用base
base.GetValue() ;//调用BASE里的GetValue
derived1.GetValue() ;//调用Derived2中GetValue
derived2.GetValue() ;//调用Derived2中GetValue
cout<<base.GetValue()<<endl;//a=1
}