我正在尝试使用set - 从基类对象获取派生类的私有变量的函数。我认为这适用于void setC函数,但是当我尝试编译getC函数时,我得到一个错误" Control reach和non-void function"。整个概念是否可能?
For Trigger
答案 0 :(得分:2)
将getC
和setC
实现为(纯)虚拟函数。并使用派生类进行实例化,如下所示:
class BASE {
public:
virtual void setC(int c) = 0;
virtual int getC() = 0;
};
class Derived : public BASE {
int c;
public:
virtual void setC(int c) { this->c = c; }
virtual int getC() { return c; }
};
void main() {
vector<BASE*> d;
d.push_back(new Derived());
d[0]->setC(5);
cout << d[0]->getC();
delete d[0];
}
PS。您收到该错误消息是因为BASE::getC
未返回值。
答案 1 :(得分:1)
为了获得getC()的多态行为,你需要向量作为指针的向量,并将getC和setC声明为虚函数。
vector<BASE*> d;
然后
d.push_back(new DERIVED(1,1));
将插入一个新的DERIVED对象,然后
d[0]->getC()
将从派生对象返回值。