读书人

关于*的有关问题

发布时间: 2012-02-25 10:01:49 作者: rapoo

关于*的问题
class Derived:public Base
在向上转型时Base *b=new Derived();可不可以写成Base b=new Derived();,我在调试的时候,把“*”去掉没调通。我的整个代码如下:
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using std::cout;
using std::endl;
class Base
{
public:
void func()
{
cout<<"Bace func()"<<endl;
}
};
class Derived:public Base
{
public:
void func()
{
cout<<"Derived.func()"<<endl;
}
void self_func()
{
cout<<"self_func(),"<<endl;
}
};

int _tmain(int argc,_TCHAR *argv[])
{
Base *b=new Derived(); //Base b=new Derived();
b->func(); //b.func();
Derived *d=(Derived *)b; //Derived d=(Derived)b;
d->self_func(); //d.self_func();这样就调不通,为什么?
delete b;
return 0;
}

[解决办法]

C/C++ code
int _tmain(int argc,_TCHAR *argv[]){Base *b=new Derived(); //Base b=new Derived();b->func(); //b.func();Derived *d=(Derived *)b; //Derived d=(Derived)b;d->self_func(); //d.self_func();这样就调不通,为什么?delete b;return 0;}
[解决办法]
Base *b=new Derived(); // 在堆上分配一个对象。
Base b=new Derived(); // 把一个指针给一个对象,难道没报错。
[解决办法]
new操作符返回的是对象的指针类型

你那样当然不行

[解决办法]
看看 new函数撒
[解决办法]
Base b=new Derived(); 后...
C/C++ code
正在编译...1>xxx.cpp1>.\xxx.cpp(34) : error C2440: “初始化”: 无法从“Derived *”转换为“Base”1>        无构造函数可以接受源类型,或构造函数重载决策不明确1>.\xxx.cpp(35) : error C2819: “Base”类型没有重载成员“operator ->”1>        .\xxx.cpp(12) : 参见“Base”的声明1>        是要改用“.”吗?1>.\xxx.cpp(35) : error C2232: “->Base::func”: 左操作数有“class”类型,使用“.”1>.\xxx.cpp(36) : error C2440: “类型转换”: 无法从“Base”转换为“Derived *”1>        没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符1>.\xxx.cpp(38) : error C2440: “delete”: 无法从“Base”转换为“void *”1>        没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符1>生成日志保存在“file://e:\Visual Studio 2005\Projects\1\1\Debug\BuildLog.htm”1>1 - 5 个错误,0 个警告========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过 ========== 

读书人网 >C++

热点推荐