,接口继承的有关问题
高手进,接口继承的问题
如果我有一个类A,A实现了一个接口IA,
而A的派生类B要实现接口IB,这时如果IB继承与IA怎么办?
class IA{
public:
virtual void draw() = 0;
};
class IB : public IA{
public:
virtual void drawex() = 0;
};
class A : public IA
{
public:
void draw(){
cout < < "A Draw ";
}
};
class B : public A, public IB
{
public:
void drawex(){
cout < < "B Drawex ";
}
};
------解决方案--------------------
effective C++ 2e item 43
让IB从IA派生基本上是设计缺陷。
------解决方案--------------------
class B : public A, public IB
{
public:
void drawex(){
cout < < "B Drawex ";
}
把public A去掉吧
上面可以不写成纯虚
------解决方案--------------------
IB接口
是B的基类,所以IB访问B的drawex是可以的,virtual机制
与A同为IA的derived class,IB不能访问A的成员,当然你可以1。让A derived from IB;2。IB组合A
------解决方案--------------------
{
public:
void drawex(){
cout < < "B Drawex ";
}
void draw(){
A::draw();
}
};
------解决方案--------------------
LZ可否表达一下这个类设计的意图。
B继承于A是处于什么考虑,因为其实B已经继承了IA接口,如果紧紧从接口而言,B已经有了这样的接口了,所以是不需要从A处继承的,可能你想用到A类的其他功能。但是在这里体现不出来,也不好评论。
如果我有一个类A,A实现了一个接口IA,
而A的派生类B要实现接口IB,这时如果IB继承与IA怎么办?
class IA{
public:
virtual void draw() = 0;
};
class IB : public IA{
public:
virtual void drawex() = 0;
};
class A : public IA
{
public:
void draw(){
cout < < "A Draw ";
}
};
class B : public A, public IB
{
public:
void drawex(){
cout < < "B Drawex ";
}
};
------解决方案--------------------
effective C++ 2e item 43
让IB从IA派生基本上是设计缺陷。
------解决方案--------------------
class B : public A, public IB
{
public:
void drawex(){
cout < < "B Drawex ";
}
把public A去掉吧
上面可以不写成纯虚
------解决方案--------------------
IB接口
是B的基类,所以IB访问B的drawex是可以的,virtual机制
与A同为IA的derived class,IB不能访问A的成员,当然你可以1。让A derived from IB;2。IB组合A
------解决方案--------------------
{
public:
void drawex(){
cout < < "B Drawex ";
}
void draw(){
A::draw();
}
};
------解决方案--------------------
LZ可否表达一下这个类设计的意图。
B继承于A是处于什么考虑,因为其实B已经继承了IA接口,如果紧紧从接口而言,B已经有了这样的接口了,所以是不需要从A处继承的,可能你想用到A类的其他功能。但是在这里体现不出来,也不好评论。