大家新年快乐! 散分50,再问个简单的有关问题

大家新年快乐! 散分50,再问个简单的问题.#includeiostreamusingnamespacestdclassB{public:B(intm,intn

大家新年快乐! 散分50,再问个简单的问题.
#include   <iostream>

using   namespace   std;

class   B
{

public:
B(int   m,   int   n):   x(m),   y(n){}
private:
int   x,   y;
};

class   A:   public   B
{

public:
A(int   x,   int   m   =   0,   int   n   =   0):   B(m,   n),   a(x){}
private:
int   a;
};


在这个程序里面,   类A公有继承类B,   基类B的数据成员不能被继承,   但用类A创建对象时却必须为类B的私有成员x,y初始化,   我觉得这似乎很冗余,   但却又必须得这样做,   请问还有没有什么的解决方法?


[解决办法]
我觉得B对A是可见的,在A中调用B的构造函数并不过分,何况只需要写一次代码。如果还嫌麻烦的话为B写一个默认构造函数就是了。
[解决办法]
不看春晚来回贴:

继承时 ,你的方法已经是最好的了!!!
[解决办法]
你的一点看法不对:

在这个程序里面, 类A公有继承类B, 基类B的数据成员不能被继承
~~~~~~~~~~~~~~~~~~~~~~~~~~

基类B的数据成员当然也被继承了。 只不过对于基类B的私有数据成员不能被直接访问而已。
你可以调用基类B的共有数据接口来访问。

#include <iostream>

using namespace std;

class B
{

public:
B(int m, int n): x(m), y(n){}
void virtual output_xy(){cout < <x < < " " < <y < <endl;}
private:
int x, y;
};

class A: public B
{

public:
A(int x, int m = 0, int n = 0): B(m, n), a(x){}
void output(){cout < <a < < " " < <endl; output_xy();}
private:
int a;
};

int main()
{

A a_temp(1, 2, 3);
a_temp.output();
return 0;
}

[解决办法]
看完春晚!来回帖!
[解决办法]
看完赵本山老头!来回帖!
[解决办法]

子类完全继承基类的数据成员,但是能访问否却又是一回事。


[解决办法]
不矛盾

你在A类中提供了自定义的构造函数和接口

在对派生类B进行实例化,先调用基类的构造函数,请问你对你自定义的构造函数和接口负的责任在

哪里?你太有才了。

加个默认的构造函数