主题:关于多重继承的菜鸟问题
这是一个用虚基类的例子,可是编译时总是出错,实在不知道错在哪了?大虾指点下迷津呐[em15]
#include <iostream>
using namespace std;
class Base
{
protected:
int x;
public:
Base(){}
Base(int ix);
void output() const;
};
Base::Base(int ix)
{
x = ix;
}
void Base::output() const
{
cout << "X = " << x << "!" << endl;
}
class D1: virtual public Base
{
protected:
int y;
public:
D1(){}
D1(int ix, int iy);
void output() const;
};
D1::D1(int ix, int iy): Base(ix)
{
y = iy;
}
void D1::output() const
{
cout << "X = " << x << "!" << endl;
cout << "Y = " << y << "!" << endl;
}
class B: virtual public Base
{
protected:
int z;
public:
B(){}
B(int ix, int iz);
void output() const;
}
B::B(int ix, int iz): Base(ix)
{
z = iz;
}
void B::output() const
{
cout << "X = " << x << "!" << endl;
cout << "Z = " << z << "!" << endl;
}
class A: public D1, public B
{
private:
int t;
public:
A(){}
A(int ix, int iy, int iz, int it);
void output() const;
};
A::A(int ix, int iy, int iz, int it): D1(ix, iy), B(ix, iz), Base(ix)
{
t = it;
}
void A::output() const
{
cout << "X = " << x << "!" << endl;
cout << "Y = " << y << "!" << endl;
cout << "Z = " << z << "!" << endl;
cout << "T = " << t << "!" << endl;
}
int main()
{
A a(2, 3, 4, 5);
a.output();
return 0;
}
编译报错:
: error C2533: 'B::B' : constructors not allowed a return type
: error C2264: 'B::B' : error in function definition or declaration; function not called
#include <iostream>
using namespace std;
class Base
{
protected:
int x;
public:
Base(){}
Base(int ix);
void output() const;
};
Base::Base(int ix)
{
x = ix;
}
void Base::output() const
{
cout << "X = " << x << "!" << endl;
}
class D1: virtual public Base
{
protected:
int y;
public:
D1(){}
D1(int ix, int iy);
void output() const;
};
D1::D1(int ix, int iy): Base(ix)
{
y = iy;
}
void D1::output() const
{
cout << "X = " << x << "!" << endl;
cout << "Y = " << y << "!" << endl;
}
class B: virtual public Base
{
protected:
int z;
public:
B(){}
B(int ix, int iz);
void output() const;
}
B::B(int ix, int iz): Base(ix)
{
z = iz;
}
void B::output() const
{
cout << "X = " << x << "!" << endl;
cout << "Z = " << z << "!" << endl;
}
class A: public D1, public B
{
private:
int t;
public:
A(){}
A(int ix, int iy, int iz, int it);
void output() const;
};
A::A(int ix, int iy, int iz, int it): D1(ix, iy), B(ix, iz), Base(ix)
{
t = it;
}
void A::output() const
{
cout << "X = " << x << "!" << endl;
cout << "Y = " << y << "!" << endl;
cout << "Z = " << z << "!" << endl;
cout << "T = " << t << "!" << endl;
}
int main()
{
A a(2, 3, 4, 5);
a.output();
return 0;
}
编译报错:
: error C2533: 'B::B' : constructors not allowed a return type
: error C2264: 'B::B' : error in function definition or declaration; function not called