首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++基类和派生类赋值有关问题

2013-09-05 
C++基类和派生类赋值问题#include iostreamusing namespace stdclass A{private:int ipublic:A(){i

C++基类和派生类赋值问题

#include <iostream>

using namespace std;

class A
{
private:
int i;
public:
A()
{
i = 0;
}
A(int t)
{
i = t;
}
A(A &aa)
{
i = aa.i;
}
void show() const
{
cout << "i: " << i << endl;
}
};

class B:public A
{
private:
int x;
int y;
public:
B()
{
x = 0;
y = 0;
}
B(int t1, int t2, int t3):A(t3)
{
x = t1;
y = t2;
}
void show() const
{
cout << "x: " << x << endl;
cout << "y: " << y << endl;
A::show();
}
};

int main()
{
A aa(60);
aa.show();
cout<< endl;

B bb(90,20,800);
bb.show();
    cout << endl;

A aa1;
aa1 = bb; //为什么bb可以赋值给aal
aa1.show();

return 0;
}

请解释下面的问题:
1:为什么派生类可以赋值给基类
2; 派生类(bb)赋值给基类(aa1)后,为什么输出aa1.show()是800,而不是90或者20,他是怎么确定从派生类中找到i的变量然后赋给基类中i的变量.
[解决办法]
1:为什么派生类可以赋值给基类
汽车可不可以被称作交通工具呢,如果在一个财产公示表格中,有个交通工具选项,那你可以填上汽车. 
2; 派生类(bb)赋值给基类(aa1)后,为什么输出aa1.show()是800,而不是90或者20,他是怎么确定从派生类中找到i的变量然后赋给基类中i的变量.
这个很简单,因为aa1是基类对象,编译器就根据aa1的对象类型,直接生成调用aa1里面show方法的代码了.
[解决办法]
A 和 B就不是同一个类型的 类型强转都冒着一定的风险
[解决办法]
1.因为 儿子是 父亲生的 所以 儿子含有父亲的基因 
2.
B(int t1, int t2, int t3):A(t3) //仔细看 你这A(t3) 调用了 A的构造函数    
 {         x = t1;         y = t2;     } 

 A(int t)     {         i = t;     } //然后这是A的构造函数


根据你的调用 所以 aa.show()输出i为800不奇怪了
[解决办法]
很基础的派生问题:这种直接赋值得益于编译器的处理,编译器会把B中A的部分赋值给A。如5楼所解释那样。A是交通工具,有个属性i:可以行使,B是辆保时捷,它有x属性:豪车,y属性:4个轮子,它也具备i属性:飞速行使。这样,aa1 = bb; 就不难理解了。所以,aa1这个交通工具不一般:可以飞速行使。

热点排行