注册 登录
编程论坛 C++教室

关于类初始化的问题

JJ是也 发布于 2012-05-19 21:51, 590 次点击
有A类  B继承A  C继承A  D继承B和C类  D类怎样初始化A类里构造函数
献上不完整的代码

程序代码:
#include <iostream>
using namespace std;

class A
{
public:
    A (int a)
    {
        num=a;
    }
protect:
    int num;
};

class B : public A
{
public:
    B (int b) : A (b)
    {}
};

class C : public A
{
public:
    C (int b) : A (b)
    {}
};

class D : public B, public C
{
public:
    D (int b)        //不完整
    {}
};

void main ()
{}
8 回复
#2
鑫乐源2012-05-20 10:16
使类A做为虚基类
#3
JJ是也2012-05-20 17:01
回复 2楼 鑫乐源
可以详细点吗?谢谢
#4
寒风中的细雨2012-05-20 18:47
程序代码:
#include <iostream>

 using namespace std;

class A

 {

 public:
     A (int a)
     {
         cout << "\tEnter class A constructor..." << endl;
         cout << "Quit class A constructor..." << endl;
     }

 };

class B : public A

 {

 public:
     B (int b) : A (b)
     {
         cout << "\tEnter class B constructor..." << endl;
         cout << "Quit class B constructor..." << endl;
     }

 };

class C : public A

 {

 public:
     C (int c) : A (c)
     {
         cout << "\tEnter class C constructor..." << endl;
         cout << "Quit class C constructor..." << endl;
     }

 };

class D : public B, public C

 {

 public:
     D (int d):C(d), B(d)   
     {
         cout << "\tEnter class D constructor..." << endl;
         cout << "Quit class D constructor..." << endl;
     }

 };

int main ()
{
    D d(1);
}
#5
JJ是也2012-05-21 17:16
回复 4楼 寒风中的细雨
程序代码:
#include <iostream>
using namespace std;

class A
{
public:
     A (int a)
     {
         n = a;
         cout << "\tEnter class A constructor..." << endl;
         cout << "Quit class A constructor..." << endl;
     }
protected:
    int n;
};

class B : public A
{
public:
     B (int b) : A (b)
     {
         cout << "\tEnter class B constructor...    " << n << endl;
         cout << "Quit class B constructor..." << endl;
     }
};

class C : public A
{
public:
     C (int c) : A (c)
     {
         cout << "\tEnter class C constructor...    " << n << endl;
         cout << "Quit class C constructor..." << endl;
     }
};

class D : public B, public C
{
public:
     D (int d):B(d), C(d)  
     {
         cout << "\tEnter class D constructor...    " << n << endl;    //为什么B类跟C类都可以调用A类的n,而D类不能用A类的n?
         cout << "Quit class D constructor..." << endl;
     }
};

int main ()
{
    D d(28);
}
高手请指点
#6
lknight2012-05-22 21:25
b和c都继承了a,都存在n,d再继承b和c时,n就有两份,d在访问n时就产生歧义了,不知道访问的是哪个是d->b->a还是d->c->a了。
#7
JJ是也2012-05-23 21:50
回复 6楼 lknight
那请问我可以怎样编写才能用到基类的n,高手请指点
#8
lknight2012-05-24 18:33
程序代码:
#include <iostream>
using namespace std;

class A
{
public:
     A (int a)
     {
         n = a;
         cout << "\tEnter class A constructor..." << endl;
         cout << "Quit class A constructor..." << endl;
     }
protected:
    int n;
};

class B : public virtual A
{
public:
     B (int b) : A (b)
     {
         cout << "\tEnter class B constructor...    " << n << endl;
         cout << "Quit class B constructor..." << endl;
     }
};

class C : public virtual A
{
public:
     C (int c) : A (c)
     {
         cout << "\tEnter class C constructor...    " << n << endl;
         cout << "Quit class C constructor..." << endl;
     }
};

class D : public B, public C
{
public:
     D (int d):B(d), C(d),A(d)

     {
         cout << "\tEnter class D constructor...    " << n << endl;
         cout << "Quit class D constructor..." << endl;
     }
};

int main ()
{
    D d(28);
    return 0;
}

#9
JJ是也2012-05-27 10:33
回复 8楼 lknight
太感谢了
1