基类与派生类转换-对象赋值
Posted Linux编程学堂
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基类与派生类转换-对象赋值相关的知识,希望对你有一定的参考价值。
3 基类与派生类的转换
3.1 对象赋值
我们先来看看一个简单的代码:
#include <iostream>
using namespace std;
int main(void)
double b = 123.456;
int a;
a = b;
cout << "a = " << a << endl;
return 1;
程序运行结果如下:
g++ test.cpp -o exe
wkf@ubuntu:~/c++$ ./exe
a = 123
可以看到,把一个double类型的变量b,赋给一个int类型的变量a。最终,变量a得到了变量b整形部分的数据。
那么,如果是派生类对象与基类对象之间的赋值,或导致什么结果?
学习了继承的知识,我们知道,派生类继承了基类,就拥有基类的一份代码。所以,派生类对象中拥有基类对象的一份代码。如果把一个派生类对象赋给基类对象,那么,基类对象获取到的是派生类中定义基类的那部分代码。程序测试例子如下:
程序运行结果如下:
可以看到,定义了student_new对象stud,然后,定义student对象s。可以直接把stud对象赋值给s对象。此时,s对象获取到stud对象中实现基类student对象的数据。所以,s对象输出的name等信息,就是stud对象设置基类student的name信息。
注意:在上面的测试例子中,student_new类从student继承,必须是public继承。否则,student_new从student类继承的数据无法在外部访问。那么,student_new从student继承过来的数据是私有信息,stud对象中的student信息无法赋给s对象。
在上面的例子中,看到stud对象销毁,调用析构函数的时候,输出name信息是异常。因为,stud对象赋值给s对象的时候,把stud.name赋值给s.name,那么,对象s消耗的时候,释放了s.name内存块,导致stud.name内存块也被释放。
所以,当stud对象销毁的时候,输出的stud.name内存块是异常的。
以上是关于基类与派生类转换-对象赋值的主要内容,如果未能解决你的问题,请参考以下文章