你好,我是新來的C + +和學習從基類指針轉換爲派生類指針。瞭解基地派生的轉換
class Base{
public:
virtual void method(){
std::cout << "this is a base class" << std::endl;
}
};
class Derived:public Base{
public:
virtual void method(){
std::cout << "this is a derived class" << std::endl;
}
};
int main(){
Base *a = new Base();
Derived *b = new Derived();
a = b
a->method()
Base c;
Derived d;
c=d;
c.method()
return 0;
}
A->()的方法將打印 「這是一個派生類」
c.method()將打印 「這是一個基類」,」
如何理解不同行爲呢?我有點明白a = b
基本上讓編譯器知道a
是一個Base
類指針指向Derived
類,所以多態性會在這裏工作。但到底是什麼c=d
代碼嗎?
我正在使用Xcode ..
在此先感謝!
您的代碼不會按照提供的方式進行編譯。 'c'和'd' **之後的'()'不能在你的真實代碼中出現。至於'c = d;',請查看「對象切片」。 – Angew 2014-09-24 14:44:46
根據@ Angew的評論請參閱[這裏](http://stackoverflow.com/questions/274626/what-is-the-slicing-problem-in-c)。 – 2014-09-24 14:48:03
當你像這樣使用多態時,90%的時間你必須使用指針或對象的引用。智能指針最好,自然。 – 2014-09-24 14:49:38