有关C++ 的问题,怎么实现这样的继承方法,高人请进?
有关C++ 的问题,怎么实现这样的继承方法?
A中含有a{…}, b{…}两个函数
B:A 中含有a{…}函数, 禁用b{…}函数
C:A中含有b{…}函数, 禁用a{…}函数
B,C均为A的子类,
但是调用B的时候, b函数无效,
调用C的时候, a函数无效,
调用A的时候, a, b函数均有效,
请高人指点,小弟不胜感激!
[解决办法]
C++不支持这个。
虽然用protected/private继承+using可以勉强实现此功能,但基本没有实际使用价值。
[解决办法]
#include <iostream>
class A
{
public:
void funA (){ std::cout < < "call funA; " < <std::endl; }
void funB (){ std::cout < < "call funB: " < <std::endl;}
};
class B:public A
{
private:
void funB();
};
class C:public A
{
private:
void funA();
};
int main()
{
A a;
B b;
C c;
a.funA();
a.funB();
b.funA();
//b.funB(); //compile error
//c.funA(); //compile error
c.funB();
}
[解决办法]
#include <iostream>
using namespace std;
class CA
{
public:
virtual void funA()
{
cout < < "CA::funA() " < <endl;
}
virtual void funB()
{
cout < < "CA::funB() " < <endl;
}
};
class CB : protected CA
{
public:
virtual void funA()
{
cout < < "CB::funA() " < <endl;
}
};
class CC : protected CA
{
public:
virtual void funB()
{
cout < < "CC::funB() " < <endl;
}
};
void main()
{
CA a1;
CB b1;
CC c1;
a1.funA();
a1.funB();
b1.funA();
//b1.funB(); 访问不允许 因为“ CB ”使用“protected”从“CA”继承
//c1.funA(); 访问不允许 因为“ CC ”使用“protected”从“CA”继承
c1.funB();
system( "pause ");
}
[解决办法]
这是一个糟糕的设计。不要试图如此。