您好我是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 ..
提前致谢!
答案 0 :(得分:2)
c = d
行执行所谓的切片 - 它取d
的基本部分并将其复制到c
,切掉所有属性派生类。这包括派生类中定义的所有虚函数。
如果你想要多态,你必须使用指针或引用。