【发布时间】:2010-05-26 03:02:48
【问题描述】:
我的基本问题很少,如果有人能解决这个问题,我将不胜感激。
1:我说base *b是什么意思 = 新派生;为什么要这样做?我们很好分开可以 为类库创建对象和 类派生,然后调用 相应地发挥作用。我知道 此基础 *b = 新派生;是 称为对象切片,但为什么和 什么时候会这样做?
2:我知道 为什么不建议转换 要派生的基类对象 类对象(因为基类是 不知道派生类 成员和方法)。我什至读了 其他 StackOverflow 线程,如果 会是这样,然后我们 必须更改/重新访问我们的设计。 我明白这一切,然而,我是 只是好奇,有什么办法吗 这个?
class base
{
public:
void f(){cout << "In Base";}
};
class derived:public base
{
public:
void f(){cout << "In Derived";}
};
int _tmain(int argc, _TCHAR* argv[])
{
base b1, b2;
derived d1, d2;
b2 = d1;
d2 = reinterpret_cast<derived*>(b1); //gives error C2440
b1.f(); // Prints In Base
d1.f(); // Prints In Derived
b2.f(); // Prints In Base
d1.base::f(); //Prints In Base
d2.f();
getch();
return 0;
}
3:在我上面的例子中,有什么方法可以使用派生类对象调用基类 f() 吗?我使用了 d1.base()::f() 我只想知道是否有任何方法不使用范围解析运算符?
非常感谢您花时间帮助我!
【问题讨论】:
-
请重新格式化以隔离代码。单击语法指南的小问号。
-
BennyG 感谢您清理我的代码格式。我可以自己编辑我的问题/我没有看到任何编辑按钮。因为,从“我知道为什么不建议将基类对象转换为派生......”开始的语句是我的第二个问题,但它错误地附加到了第一个问题。
-
大致解决了这个问题。不过,您应该会在问题下方看到一个编辑按钮。
-
base *b = 新派生;不是对象切片。当您按值分配时会发生对象切片,例如 base b= d;,其中 d 是派生的实例。
标签: c++ polymorphism overloading overriding