各位请进,关于C++实例的类型转换

slwj 2011-08-27 12:07:40
各位好,关于C++实例的类型转换,题目如下:
[Quote=代码:]

#include "stdio.h"

class a
{
public:
virtual void func(){printf("a func()\n");}
};

class b: public a
{
public:
void func(){printf("b func()\n");}
};

int main()
{
class a object_a;
(class b)object_a.func(); //对于此行,编译报:Invalid use of void expression
}
[/Quote]
看意思,Invalid use of void expression,错误不止一处,各位可以一一解释下吗,多谢了!
...全文
98 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
slwj 2011-08-28
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 luciferisnotsatan 的回复:]

引用 4 楼 slwj 的回复:

引用 1 楼 luciferisnotsatan 的回复:

(class b)加class干嘛?
而且这里是转的func的返回类型void。前面加括号。
即使加了,a的对象还是不知道怎么转成b。

这代码错误不少,lz还是把继承,多态再看一遍吧。


这里是想将object_a的类型由class a强制转化为为class b,不想用指针……
[/Quote]
牛哦,这就是我想要的答案!!
jackyjkchen 2011-08-27
  • 打赏
  • 举报
回复
语法错误有点莫名奇妙,楼主看什么书的……
bobo_包子 2011-08-27
  • 打赏
  • 举报
回复
妈呀 写的啥啊
yby4769250 2011-08-27
  • 打赏
  • 举报
回复
ADT是否理解了?class是个关键字,class b中,b才是一个类型,一个ADT类型,和内置的int一样的‘类型’
luciferisnotsatan 2011-08-27
  • 打赏
  • 举报
回复
(class b)加class干嘛?
而且这里是转的func的返回类型void。前面加括号。
即使加了,a的对象还是不知道怎么转成b。

这代码错误不少,lz还是把继承,多态再看一遍吧。
wansbest 2011-08-27
  • 打赏
  • 举报
回复
类型转换是(b)object_a.fun(); 但就算这么写也肯定还是报错,对于基本数据类型,他们之间的运算C++标

准都是已经定义好了的,比如 int a,b; a+b 编译器会知道怎么处理a+b因为C++已经对这个+做出了怎么处理

的方法,但是如果是自己定义的构造类型,比如 class A{....};A a,b;这时候你去做a+b,那么肯定会报

错,因为C++本身定义的+这个运算符肯定是不支持A这个数据类型的,编译器根本不知道a+b要做什么事。同

理类型转换符号也一样。所以C++提供了运算符重载,如果真有必要实现两个类之间的转换的应该可以通过

重载转换符实现。
Defonds 2011-08-27
  • 打赏
  • 举报
回复
new instance
luciferisnotsatan 2011-08-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 slwj 的回复:]

引用 1 楼 luciferisnotsatan 的回复:

(class b)加class干嘛?
而且这里是转的func的返回类型void。前面加括号。
即使加了,a的对象还是不知道怎么转成b。

这代码错误不少,lz还是把继承,多态再看一遍吧。


这里是想将object_a的类型由class a强制转化为为class b,不想用指针实现,请问,想实现这个想法具体该怎么做?……
[/Quote]
c++里,不用加class,直接用(b)就行了。
用指针是必需的,即使是一个对象,你也要 *((b*)&object_a)这么转。不过你想要的功能(向下转型)本身就是有问题的。

如果你要(b)object_a,那么你要重载转换操作符,不过这个应该不是你想要的东西
pengzhixi 2011-08-27
  • 打赏
  • 举报
回复
额 你这里是先调用,然后将fun的返回值void转换成 class b
乃不知有汉 2011-08-27
  • 打赏
  • 举报
回复
你调用的object_a.func(); 是没有返回值的,
没有返回值 你还要将返回值 给强制转换成别的类型,编译器自然不干了
另 貌似 不存在void 类型哦
void* 的就可以强制转换了
starfox789 2011-08-27
  • 打赏
  • 举报
回复
不能向下转
猫xiaowai 2011-08-27
  • 打赏
  • 举报
回复
如果你想调用class a的成员函数func(),那那个virtual就不要加了。
slwj 2011-08-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 luciferisnotsatan 的回复:]

(class b)加class干嘛?
而且这里是转的func的返回类型void。前面加括号。
即使加了,a的对象还是不知道怎么转成b。

这代码错误不少,lz还是把继承,多态再看一遍吧。
[/Quote]

这里是想将object_a的类型由class a强制转化为为class b,然后再调用成员函数func(),不想用指针实现,请问,想实现这个想法具体该怎么做? 多谢!
slwj 2011-08-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 luciferisnotsatan 的回复:]

(class b)加class干嘛?
而且这里是转的func的返回类型void。前面加括号。
即使加了,a的对象还是不知道怎么转成b。

这代码错误不少,lz还是把继承,多态再看一遍吧。
[/Quote]

这里是想将object_a的类型由class a强制转化为为class b,不想用指针实现,请问,想实现这个想法具体该怎么做? 多谢!
pathuang68 2011-08-27
  • 打赏
  • 举报
回复
楼主一些很基本的语法,似乎还不太清楚。

建议楼主找本好一点C++入门书看看,比如C++ Primer Plus

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧