[英]Using void* as C++ equivalent of Java Object
我正在尝试创建一个包含void*
的std::vector
的类。 有人告诉我, void*
是C ++相当于Java中的Object
。 由于这是用Java编写的程序的C ++端口,因此它应该在理论上起作用。
Java的:
ArrayList<Object> list;
C ++:
vector<void*> list;
这将无法编译,给出错误:“'reference':非法使用'void'类型”。
void*
是否真的是Java的Object
的C ++等价Object
? 我用错了吗?
Java Object
是一个基本的基类,它为所有Java类提供了一些公共属性。
在C ++中没有这样的东西。 如果要设计多态层次结构,可以设计自己的基类MyBaseClass
(抽象与否),然后设计派生类。
因此,创建vector<void*>
容器在技术上是可行的,但它没有意义。 对于正确的软件设计,您需要的是设计基类MyBaseClass
,以便您能够创建vector<MyBaseClass*>
容器。
指向void的指针意味着你有一些内存地址,但你不知道那是什么类型的东西。 您可以使用任何类型的指针创建向量,然后在向向量中添加项时,可以将指针强制转换为在向量声明中使用的任何指针。 这很好但它会在语法上起作用。 不利的一面是你不知道向量中有哪些数据项。
两点都是对的。
void*
不是Object
的C ++等价Object
。 由于您没有提供有关您想要完成的任何信息,因此无法就您应该做什么提供任何建议。
void*
vs Object
。 这些当然不是等价物, void*
变量包含没有类型的内存地址(它没有方法也可以指向基元), Object
变量是Object
的引用 ,它是Object
类的一个实例或者它的一个子类-classes(因此有一些方法,多态性的可能性,并且不能引用基本类型)。
比较可能意味着如果在c ++中你想要存储任何类的对象,你将得到一个void*
然后在评估时根据需要进行转换。 通过这种方式,他们可以做一些相同的事情。
编译错误可能是由于您在创建列表后所做的事情,因为解释后的void*
不能被视为Object
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.