C++ c+中对象的转换+;

C++ c+中对象的转换+;,c++,C++,问题:如何将一个类类型更改为另一个类类型 我的答覆是: X is a object of class X Y is a object of class Y x=y; 这个答案正确吗?通过将一个类的对象与另一个类的对象相等,可以将一个类的类型更改为另一个类的类型吗?当您遇到一个可以用一个非常简单的程序来测试的问题时,您可以编写该程序并进行尝试 a=b的功能可以很容易地测试 class A { } class B { } int main() {

问题:如何将一个类类型更改为另一个类类型

我的答覆是:

       X is a object of class X
       Y is a object of class Y

        x=y;

这个答案正确吗?通过将一个类的对象与另一个类的对象相等,可以将一个类的类型更改为另一个类的类型吗?

当您遇到一个可以用一个非常简单的程序来测试的问题时,您可以编写该程序并进行尝试

a=b
的功能可以很容易地测试

class A
{
}

class B
{
}

int main()
{
    A = B; 
}
这失败了,因为此时A和B只是抽象概念

int main()
{
    A a;
    B b;
    a=b; 
}
这试图将类型B的数据复制到类型a的空间中。编译器将不允许这样做,因为在软件中,方形销钉与圆孔的匹配程度并不比在现实生活中更好。您可以告诉编译器,您将通过在a中创建一个以b为参数的
=
运算符使b适合a,但a仍然是a。谢谢您Ayn Rand

为什么会这样?当你做了一个A,你有一定的内存来保存A,并签订了由A类定义的合同,某些东西将进入某些地方。违反合同,坏事就会发生

你可以做一些我们在更原始的时代经常不得不做的恶心的事情,比如把A类型转换成B类型:

A a;
B b;
*((B*)&a) = b;
但是A仍然是A,你只是把一个B形的物体压入它的空间。发生这种情况时,程序会发生什么变化?我将引用经典名著:

我们死了

--克里尔勋爵,最后一位星际战斗机

但这可能需要一段时间,而且看起来很有效。A仍然是A,只是现在它是一个破碎的A,等待机会崩溃你的程序

如果您希望A现在成为B,请创建一个新B,并使用
=
操作符将A中的内容复制到新B中

例如,您还可以利用具有相同祖先的类以类似的方式运行

class base
{
public:
    int getBaseval()
    {
        return baseval;
    }
private:
    int baseval;
}

class A: public Base
{
}

class B: public Base
{
}

当调用
getBaseval
时,您可以指望A和B都具有
baseval
并返回
baseval
,但这是您所能期望的最好结果。你不能把A变成B或者变成基地。你可以把A当作一个相似的基,但它仍然是A。A可以用一个它们都有的函数来做一些与基或B完全不同的事情(读懂virtual关键字),但它仍然会有那个函数。它仍然是A。

看起来像是一项作业。你试过铸造吗?赋值运算符是否重载?否,此运算符未重载。我们能用这个方法把一个类的类型改成另一个类吗?你觉得怎么样?为什么?先生,我在上面提到了我的答案。我想如果我们把x等同于y,x就会变成与y相同的类型。用词来说,这个问题没有意义。非常感谢你的帮助…你是一个救世主…-)