C++ 在C++;?

C++ 在C++;?,c++,casting,polymorphism,C++,Casting,Polymorphism,我见过以这种格式编写的类: class A; class B; class C; class A { friend class B; private: int var1; int var2; public: A() {} A(int x, int y) { var1 = x; var2 = y; } }; class C { private: int var1; int var2; public

我见过以这种格式编写的类:

class A;
class B;
class C;


class A {
    friend class B;
private:
    int var1;
    int var2;
public:
    A() {}
    A(int x, int y) {
        var1 = x;
        var2 = y;
    }
};

class C {
private:
    int var1;
    int var2;
public:
    C(int var1, int var2) {
        this->var1 = var1;
        this->var2 = var2;
    }
};

class B : public C {
    explicit B(const A& x) : C(x.var1, x.var2) {};
};

int main(int argc, char* argv[]) {

    A a(5, 4);
    B* b = reinterpret_cast<B*>(&a);
    return 0;
}
关于这一点,我知道两件事,它可以用来调用类a的实例作为类C的实例的reinterpret cast,冒号排序将左侧方法映射为右侧方法。通过映射,我的意思是将显式B(conta&x)映射到A(x.var1,x.var2)

我想知道,当你把一个函数映射到另一个函数时,它叫什么?而且,这里的重新解释转换是否仍然将指针指向内存位置作为预期类的指针,或者它只是使用所述变量创建一个新的实例


谢谢。

这是一个构造函数,不是方法。它没有将任何东西映射到任何东西。它为类
B
定义了一个构造函数。该构造函数为
C
类型的基类调用构造函数,并向其传递适当的参数

我认为你应该停止使用
重新解释cast
。从您的问题来看,您似乎完全不恰当地使用了它,这可能是危险的,并且隐藏了bug。<代码> RealTytPase的目的是为了重写类型系统的安全性,因为您不理解C++,但您应该使用<强> >类型>系统,而不是试图打败它。 这里的reinterpret cast是否仍然将指针指向内存位置作为预期类的指针,或者它只是使用所述变量创建一个新的实例


您的
重新解释所做的一切都是对编译器撒谎,它不会创建任何新的实例。

是否可能是
类B:A…
?否则此代码仍然没有意义似乎有一些错误:例如,在
A
的第二个构造函数中:
this.var1
是错误的->应该是
this->var1
。此外,为什么要分配任务?为什么不干脆
A(intvar1,intvar2):var1(var1),var2(var2){}
?后者是“惯用”结构(包括参数与同名成员变量的混淆,这是(令人惊讶的!)正确且正确编译的)。顺便说一句,在构造函数中,
不是映射。它启动了超类和成员变量的初始化?它构造
B
,用取自
A
类型的参数
x
的成员初始化超类
C
。冒号
正是构造函数中初始值设定项的起点。我看不到任何“reinterprete cast”。它可以用于从A到B的显式转换(每个具有不同类型的单个参数的构造函数都可以这样做)。如果没有
explicit
,它甚至可以隐式转换,但这不是作者想要的。因此,
explicit
可以表示。是的,我没有在自己的代码中使用重新解释。在原始作者的代码中的某个地方,我认为这与显式转换有关。
explicit B(const A& x) : C(x.var1, x.var2) {};