目录
一.子类和父类对象的赋值转换
先来看一个案例:变量间的赋值
int main(){
int a;
double b = 10.22;
a = b; //赋值转换
return 0;
}
在上面这个代码中,有两个变量a,b,这两个变量类型分别为整型和浮点型,而变量b赋值给变量a,变量b的值10.22在赋值给变量a的过程中,产生一个临时变量,10.22拷贝一份给了临时变量,在这个临时变量中进行类型转换,10.22-->10,然后临时变量的值10再赋值给变量a。
学习了继承的特性后,我们将通过这个案例看看子类和父类对象的赋值转换过程:
class Person {
public:
void Print() {
cout << "Person类对象的成员属性:" << endl;
cout << _age << endl;
cout << _name << endl;
cout << _hight << endl;
cout << _address << endl;
cout << endl;
}
public:
int _age;
string _name;
int _hight;
string _address="TaiYuan";
};
class Student:public Person{
public:
int _className;
string _grade;
};
int main(){
Person p1;
p1._name = "小曹";
p1._age = 21;
p1._hight = 172;
p1.Print();
Student s1;
s1._name = "小王";
s1._age = 22;
s1._hight = 170;
s1._grade = "大三";
//将子类对象的成员值复制给父类对象
p1 = s1;
}
此时p1对象的成员值就是s1的成员值,但p1并不会有Student子类所创_grade,_className成员变量值,在赋值操作中,子类对象只会将它继承过来的成员值重新赋回给父类对象!!!
这就是子类对象对父类对象的赋值转换——支持向上转换,不支持向下转换。
也就是说父类对象不能赋值给子类对象,因为父类对象中并没有子类对象的_classname、_grade成员值,那它就不能赋!!!