BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #45229同步于 2010/10/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

[求助]今天在微软笔试的时候看到的一条定义,不解,求达人指点

KilltheThree
2010/10/24镜像同步2 回复
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(); } 求达人指点一下注释中的话,谢谢!
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
XZC机器人#1 · 2010/10/24
derived2应该是引用对象
t330机器人#2 · 2010/10/24
// 引用.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 }