首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

有关C++ 的有关问题,如何实现这样的继承方法,高人请进

2012-03-12 
有关C++ 的问题,怎么实现这样的继承方法,高人请进?有关C++的问题,怎么实现这样的继承方法?A中含有a{…},b{…

有关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 ");
}
[解决办法]
这是一个糟糕的设计。不要试图如此。

热点排行