+ -
当前位置:首页 → 问答吧 → 问个很简单的C++语言基础问题,派生类的对象强制转换成基类对象的时候加&与不加&有什么区别

问个很简单的C++语言基础问题,派生类的对象强制转换成基类对象的时候加&与不加&有什么区别

时间:2011-11-30

来源:互联网

我写了两个类,一个是基类baseClass,一个是派生类DeriveClass,重载了操作符<<,代码如下:
//baseClass.h
#pragma once
#include <iostream>
class baseClass
{
public:
baseClass(int nTest);
friend std::ostream& operator<<(std::ostream& os,const baseClass& baseClassInstance);
~baseClass(void){};
private:
int m_nTest;
};

//baseClass.cpp
#include "baseClass.h"
baseClass::baseClass(int nTest)
:m_nTest(nTest)
{
}
std::ostream& operator<<(std::ostream& os,const baseClass& baseClassInstance)
{
os<<baseClassInstance.m_nTest<<std::endl;
return os;
}

//DeriveClass.h
#pragma once
#include "baseClass.h"
class DeriveClass :public baseClass
{
public:
DeriveClass(int nDeriveTest,int nTest);
~DeriveClass(void){};
friend std::ostream& operator<<(std::ostream& os,const DeriveClass& deriveClassInstance);
private:
int m_nDeriveTest;
};
//DeriveClass.cpp
#include "DeriveClass.h"
DeriveClass::DeriveClass(int nDeriveTest,int nTest):baseClass(nTest),m_nDeriveTest(nDeriveTest)
{
}
std::ostream& operator<<(std::ostream& os,const DeriveClass& deriveClassInstance)
{
os<<(const baseClass&)deriveClassInstance;//请问这个地方换成os<<(const baseClass)deriveClassInstance;有什么不同 os<<deriveClassInstance.m_nDeriveTest<<std::endl;
return os;
}

作者: HappyCodeFly   发布时间: 2011-11-30

os<<(const baseClass&)deriveClassInstance;//请问这个地方换成os<<(const baseClass)deriveClassInstance;

=====

差别很大。。

(const baseClass&)deriveClassInstance;//效果:生成一个const baseClass& 类型临时变量,指向
deriveClassInstance的基类部分。当他不是const 时,还可以修改deriveClassInstance的基类部分。

(const baseClass) deriveClassInstance//效果:生成一个const baseClass 类型的临时变量,用deriveClassInstance 的基类部分复制构造而成。不会对deriveClassInstance造成改动。

作者: mingliang1212   发布时间: 2011-11-30

这篇文章应该可以帮你:
http://210.44.193.6/C++/text/17.htm

作者: dreamtale123   发布时间: 2011-11-30