【发布时间】:2017-10-28 03:58:39
【问题描述】:
我对一些 c++ OOP 概念有误解,例如如果我有一个 base 类返回指向同一类的对象的指针,请说:
class base{
public:
int baseVal;
base* foo(){
return new base;
}
}
还有一个继承方法foo()的derived类:
class derived : public base{
public:
int derivedVal;
//some other members
}
我的问题是“当我从 derived 对象调用方法 foo() 时会发生什么?有什么方法 - 而不是覆盖 - 让它返回 derived 而不是 base 的对象?”例如:
int main(){
derived obj1;
derived * obj2P = obj1.foo();
cout << obj2P->derivedVal << endl;
return 0;
}
我该如何处理这样的事情?
【问题讨论】:
-
为什么不想覆盖?覆盖是获得这种效果的确切方法。
-
重写我的意思是写一个新方法——同名——返回一个指向
derived对象的指针。 -
好吧,如果
foo没有在base中声明为virtual,而你在derived中写了另一个foo,那将是隐藏的,而不是技术上的覆盖。但我仍然不知道你到底想做什么。 -
不,你不能那样做...derivedVal 是派生的数据成员而不是基数。
-
可能是一个 x/y 问题。你到底想做什么?这样,人们就可以根据实际情况提出解决方案,而不仅仅是抽象地评论某事是否可行,何时可能不是一个好主意,甚至是你想要的。另外,以防万一,谷歌克隆模式。
标签: c++ oop inheritance