C++真高手请进

来源:百度知道 编辑:UC知道 时间:2024/05/28 03:39:07
将派生类对象转换为基类类型的引用和用派生类对象对基类对象进行初始化这两者有什么区别?最好能举个简单的例子说明。

能解释的清楚我再加分,要是先给了分没人会就浪费了

有区别啊:
假设A是基类,B是派生类
A有成员ia,ib;
B有成员ia,ib,ic;(ic是B类派生而来)

假设有对象b,成员值分别是{ia = 1,ib = 2,ic = 3};
现在声明一个b的引用
A & m = b;
那么m的地址与b的地址是同一个,那么如果强制转化m的指针成B类的话
如下面的语句:
cout << ((B *)(&m))->ic;
将会输出3;

再看一个赋值情况的
A n = b;
注意这时n的成员ia,ib的值与b的相同,但时ic的值确没有复制过来。
这时候强制转化n为B类再访问ic
如下面的语句:
cout << ((B *)(&n))->ic <<endl;
在不同的编译器有不同的结果:
我的是:2293592
一般都是出现一个随机数,因为你访问的那块内存没有赋值。

下面是源代码:
你可以仔细看看:
记得给分啊!!!

#include <iostream>
using namespace std;

class A
{
public:
int ia;
int ib;
A(){ ia = 1;ib = 2;}//构造函数
};

class B:public A
{
public:
int ic;
B(){ ic = 3;}//构造函数
};

int main()
{
A a;
B b;

A & m = b;//m是b的引用
A n = b;//n是b的赋值

cout << ((B*)(&m))->ic <<endl;
cout << ((B*)(&n)