理解从基础到衍生的转换

时间:2014-09-24 14:41:34

标签: c++ implicit-conversion dynamic-allocation

您好我是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-&gt; method()将打印“这是派生类”

c.method()将打印“这是一个基类”“

如何理解不同的行为?我有点明白a = b基本上让编译器知道a是一个指向Base类的Derived类指针,所以多态在这里工作。但c=d在代码中做了什么?

我正在使用Xcode ..

提前致谢!

1 个答案:

答案 0 :(得分:2)

c = d行执行所谓的切片 - 它取d的基本部分并将其复制到c,切掉所有属性派生类。这包括派生类中定义的所有虚函数。

如果你想要多态,你必须使用指针或引用。