多继承的派生类的构造函数如何编写

[复制链接]
查看11 | 回复1 | 2008-7-9 16:53:36 | 显示全部楼层 |阅读模式
class gf()
{
public:
gf(int A){a=A;}
private:
int a;
}
class f1:public gf
{
public:
f1(int A,int B):gf(A){b=B;}
private:
int b;
}
class f2:public gf
{
public:
f2(int A,int C):gf(A){c=C;}
private:
int c;
}
class s:public f1,public f2
{
public:
.......
private:
int d;
}
类gf派生出类f1和f2;而f1和f2又是类s的基类;由于f1和f2都具有相同的数据成员a,请问派生类s的构造函数该如何编写(即.....部分)?

回复

使用道具 举报

千问 | 2008-7-9 16:53:36 | 显示全部楼层
在s中的构造函数里,你只能调用f1和f2的构造函数,也就是说,你只能调用你的类的“直接基类”的构造函数,不能调用更上一层的构造函数。写成;class s:public f1,public f2{public:s(int a,int b,int c):f1(a,b),f2(a,c){}}如果要显式地引用f1中的数据成员a,就要加上作用域,如下:s(int a,int b,int c){f1::a=a;f2::a=a;b=b;c=c;}但是,看上去,派生类s对它的基类的几个成员都没有访问权限,因为无论是a还是b、c,都是私有的,所以上面的写法编译不过去,但是作用域规则是正确的,也是说,如果a、b、c的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行