变态C++问题

来源:百度知道 编辑:UC知道 时间:2024/05/20 19:28:55
我定义了两个类 基类和派生类
class CBase
{
public:
CBase(){cout << "Base counstor" <<endl;};
~CBase(){ cout << "Base Relase!" <<endl;};
};

class CDerive : public CBase
{
public:
CDerive(){cout << "CDerive counstor" <<endl;};
~CDerive(){cout << "CDerive Relase!" <<endl;};

void OutPut(){cout << "CDerive::OutPut()" << endl;};
};
在派生类中定义了OutPut函数(基类没有)

我在主函数中定义了
CDerive* pDev;
pDev = (CDerive*)new CBase;
pDev->OutPut();( 我知道很变态)

但是这样输出了派生类的那句话!!!
这是怎么回事?我并没有创建派生类对象啊!!!

我不同意楼上的说法,只有在用 new 的情况下,并且函数不涉及类的任何成员,这样的函数是可以输出的。
CDerive* pDev = (CDerive*)new CBase;
pDev= NULL;
pDev->OutPut();

这样也是可以正常输出的。
可以到网上搜一搜关于 new 新解的文章,会详细告诉你为什么。

pDev = (CDerive*)new CBase;等同于pDev = new CDerive; 发生了类型转换

(CDerive*)强制转换会生成一个派生类的。

你改以一下:
CBase* pBase;
CDerive* pDev;

pBase=new CBase;
pDev=pBase;
pDev->OutPut();

你的函数并没用引用派生类对象的值啊
昨天和别人看了一个
只要你定义了指向这个类的指针
而这个类里面存在某个不需要调用 公共变量/私有变量 的函数
那么这个函数是可用的
即使你
CDerive* pDev;
pDev= NULL;
pDev->OutPut();
也是可以输出的

不需要用new 只要 指针已被定义且赋值 就可以调用

朋友,我告诉你这是可以输出的!!!!!这就是C++语言!
我如下给你解释希望你会懂。认真每个字的看哈,否则注意力不集中的。
首先我给你举个例子:
咱们俩来定义一个基类名叫 “人”!里面定义了一个输出函数,输出“这个人有2只手”
然后咱们来从 基类 “人” 派生出来一个类,这个类名叫“怪人”。
他怪在哪里呢,他怪就怪在他比基类还要多个输出函数,输出“这个人多了只手”(貌似跟你的结果一样很变态。。。这个是残废?又不缺手。。。)
然后这个“怪人”这个类就产生了一个实例叫“怪人1号”,虽然他怪,但是他总还是一个人撒,所以可以用一个指向人的指针来指向他。好了,现在这个指向的人的指针指向这个怪人了(有点绕口)。