关于继承的问题
第一个,
class a
{
public:
a(int);
};
class b : public a
{
b(int) {}
};
编译后会有C2512错误,但如果只定义b的构造函数而不写函数体就没问题。为什么?我的环境是VS2005.
第二个,能不能选择继承?比如
class a
{
virtual void func1();
virtual void func2();
};
class b
{
virtual void func1();
virtual void func2();
virtual void func3();
};
现在有一个类c,它只想继承a的func1()和b的func2(),有没有可能在不修改两个基类的情况下实现?
谢谢!
[解决办法]
问题1,等你用到b来构造变量的时候就知道了
问题2,必须c自己实现这2个函数,可以在里面转调用基类的版本。
[解决办法]
你不可能禁止别人通过b*来访问func3,虽然你可以禁止别人通过c*来访问func3。
问题1,你定义一个b x(1);就知道了
[解决办法]
class a
{
1.
public:
a(int);
};
class b : public a
{
b(int x):a(x) {}//要加上基类构造函数
};
2.
class a
{
virtual void func1();
virtual void func2();
};
class b
{
virtual void func1();
virtual void func2();
virtual void func3();
};
构造一个中间层:b_mid和a_mid
class mid_a:private a
{
void func1(){}
}
class mid_b:private b
{
public:
void func2(){}
};
以后想要从a,b继承的时候从mid_a,mid_b继承就OK了