C++ 带结构的隐式类型转换

C++ 带结构的隐式类型转换,c++,types,typecasting-operator,C++,Types,Typecasting Operator,我是CPluPlus的新手,不知道如何进行隐式类型转换 结构之间的转换 我想做以下工作: A a = new __A(); Object o = a; 我知道这需要操作符重载(我想是吧?) 实现运算符重载是徒劳的。我已经在这篇文章中使用了这些例子:但是我不能让任何东西起作用。任何帮助都是非常有用的 感激的。这是我的结构的布局 typedef __Object* Object; typedef __Class* Class; typedef __String* String; typedef _

我是CPluPlus的新手,不知道如何进行隐式类型转换 结构之间的转换

我想做以下工作:

A a = new __A();
Object o = a;
我知道这需要操作符重载(我想是吧?) 实现运算符重载是徒劳的。我已经在这篇文章中使用了这些例子:但是我不能让任何东西起作用。任何帮助都是非常有用的 感激的。这是我的结构的布局

typedef __Object* Object;
typedef __Class* Class;
typedef __String* String;
typedef __A* A;
typedef __Test002* Test002;

struct __Object {
  __Object_VT* __vptr;

  // The constructor.
  __Object();
  // The methods implemented by java.lang.Object.
  static int32_t hashCode(Object);
  static bool equals(Object, Object);
  static Class getClass(Object);
  static String toString(Object);

  // The function returning the class object representing
  // java.lang.Object.
  static Class __class();

  // The vtable for java.lang.Object.
  static __Object_VT __vtable;
};

struct __A { 
  __A_VT* __vptr;
  __A();
        static __String* toString(A);
        static int32_t hashCode(Object);
        static bool equals(Object, Object);
        static Class getClass(Object);

  static Class __class();

  static __A_VT __vtable;
};

要使其工作,
\uu A
需要从
\uu对象
继承,因为这是将指向前者的指针指定给后者的唯一方法

关于你发布的代码和你的目标的一些事情

  • C++通过继承为您处理虚拟方法调度,因此无需手动将虚拟表阻塞到类中
  • 正如其他人提到的,您使用的是无效/保留标识符
  • 如果您正在创建一个单根继承层次结构(如Java或添加反射支持),那么您可能希望将对象类中的所有静态方法重构为虚拟或纯虚拟成员函数,让类a从类对象公开派生并重写这些方法
  • 顶部的用例意味着您真正想要的是能够有一个指向类a的对象的指针,使用类对象的接口:这也是由C中的公共继承启用的虚拟分派++
所以可能是下面这样的事情

#include <string>

class Object
{
  /* ... */
  public:
    virtual ~Object() = default; // necessary to avoid slicing

    virtual std::string toString() const = 0;

  /* ... */
};

/* virtual inheritance necessary here if you plan on
   deriving from multiple classes that derive from Object;
   otherwise remove */
class A :  public virtual Object 
{
  /* ... */

  public:
    // may or may not be needed, viz., above
    // virtual ~A() = default;

    std::string toString() const override { return std::string{ "A" }; }

  /* ... */
};

#include <iostream>
#include <memory>

int main()
{
  std::unique_ptr<Object> o{ std::make_unique( A ) };
  std::cout << o->toString() << '\n'; // prints "A"
}
#包括
类对象
{
/* ... */
公众:
virtual~Object()=default;//避免切片所必需的
虚拟std::string toString()const=0;
/* ... */
};
/*如果您计划继续,这里就需要虚拟继承
从多个派生自对象的类派生;
否则移除*/
A类:公共虚拟对象
{
/* ... */
公众:
//可能需要也可能不需要,即上述
//virtual~A()=默认值;
std::string toString()常量重写{return std::string{“A”};}
/* ... */
};
#包括
#包括
int main()
{
std::unique_ptr o{std::make_unique(A)};

std::cout toString()名称,前导下划线后跟一个大写字母和两个下划线(无论在何处)如果你是新的C++,你应该找到一个更好的学习资源,因为你现在使用的任何东西都很糟糕。为什么你要做代码?TyPufFuxA*A,<代码>?真是太可怕了!请告诉我你不是在做这个代码> A*A*=新A.()如果C++是C++ java的新的,那么,“如果在C++中是新的”,那么如何在结构之间做隐式类型转换不是最好的开始。一个好的方法就是忘记你对java的了解。我们正在做一个将java转换成C++的项目,所以我想知道是否有一种方法可以为C++动态/静态类型化。