C ++如何从基类对象返回派生类的私有变量

时间:2016-01-09 17:57:32

标签: c++ inheritance

我正在尝试使用set - 从基类对象获取派生类的私有变量的函数。我认为这适用于void setC函数,但是当我尝试编译getC函数时,我得到一个错误" Control reach和non-void function"。整个概念是否可能?

For Trigger

2 个答案:

答案 0 :(得分:2)

getCsetC实现为(纯)虚拟函数。并使用派生类进行实例化,如下所示:

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()

将从派生对象返回值。