【发布时间】:2013-11-29 02:31:52
【问题描述】:
我怎么可能这样做:
class Base
{
public:
int a, b, c;
void function();
...
};
class Derived1 :
private Base
{
public:
int d, e, f;
...
};
class Derived2 :
private Base
{
public:
void addObject(const Base* obj);
...
};
请注意,我将其继承为 private
那我想做点什么:
Base* d1 = new Derived1();
Base* d2 = new Derived2();
d2->addObject(d1);
这是我从编译器得到的相关问题:
C:\test\test.cpp||In function 'void init()':|
C:\test\test.cpp|423|error: no matching function for call to 'Derived2::addObject(const Base*)'|
C:\test\test.cpp|423|note: candidate is:|
C:\test\test.h|29|note: void Derived2::addObject(const Base*)|
C:\test\test.h|29|note: no known conversion for argument 1 from 'Derived1 {aka ... }' to 'const Base* {aka ... }'|
||=== Build finished: 1 errors, 0 warnings (0 minutes, 9 seconds) ===|
我想让某些派生类将Base 继承为私有的原因是在公共范围内隐藏一些Base 的成员/函数。
我不想在公共范围内直接访问某些Base::functions(),但要使用Derived::function() 来操作其数据成员,并让派生类决定它将执行什么操作。
但是,我可以考虑覆盖我不想在公共范围内直接修改的基类中的每个函数,但在我的情况下它不灵活且太多。
我的意思是:
class Base
{
public:
//I must think in advance deciding whether if it'll be virtual or not.
[virtual] void f1(int);
[virtual] void f2(int);
[virtual] void f3(int);
//and many more...
};
class Derivedn :
private Base
{
public:
//hmm, I should not neglect to override certain base' member functions
//that I don't want to access in public scope.
void f1(int);
};
我想避免这种情况,但是...
有没有其他方法可以做,类似于这个,而不覆盖每个Base::function()s?
【问题讨论】:
标签: c++ inheritance polymorphism