【发布时间】:2015-06-11 11:25:45
【问题描述】:
这出现在我的 c++ 类中,假设我们有一个带有一些公共函数的基类。
class basevector {
public:
virtual int indexTo(int arg);
virtual int getSize() const;
virtual int push(int);
virtual int pop(int);
}
那么我们有一个私有派生的类
class myvector : private basevector{
public :
virtual int push(int);
virtual int pop(int);
virtual int getSize() const;
}
请注意,myvector 类限制了对 indexTo 函数的访问,并强制用户使用 push 和 pop。
现在,如果我有一个函数需要一个指向 basevector 的指针
void do_something(basevector * arg) {
for(int i = 0; i < arg->getSize(); i++) {
int k = arg->indexTo(i);
do_something_else(k);
}
}
然后我尝试执行以下操作
basevector * ptr = nullptr;
ptr = new myvector;
do_something(ptr);
会发生什么? myvector 是 basevector,但尝试在 basevector 中使用公共 indexTo 函数的函数将在 myvector 上失败。
【问题讨论】:
-
你试过了吗?
-
不,我没有尝试过,它只是在讲座中出现的。如果 do_something 函数是 myvector 内部的私有函数,它如何访问 indexAt 成员函数?
-
它只能看到基类,除非你的基类有虚方法,否则它会调用基类中的方法。它并不关心基类是否被派生类私有扩展。
标签: c++ class inheritance private