可接受的编程实践.转换和转换

Acceptable programming practice - conversion and upcasting

本文关键字:转换 编程 可接受      更新时间:2023-10-16

以下是可接受的编程实践:

class TestA
{
    protected:
        int A;
    public:
        TestA(){A = 10;}
        TestA &operator=(const TestA &ItemCopy)
        {
            A = ItemCopy.A;
            printf("A is: %d!n",A);
            return *this;
        }
};
class TestB : public TestA
{
    protected:
        int B;
    public:
        TestB(){A = 20; B = 30;}
        operator const TestA&(){ return *this; } //Note returns reference, upcasts implicitly.
};
int main()
{
    TestA Test;
    TestB Test2;
    Test = Test2; //Calls Test2's (AKA TestB's) conversion operator
    return 0;
}

什么理由可以接受/不可接受?

(请避免提出在TestA中使用TestB赋值操作符的明显建议——这是一个关于上转换和/或转换操作符是否应该以这种方式使用的问题)。

我也鼓励在问题的评论中留下反馈upvote/downvotes,以便我将来可以改进我的问题

这里不需要转换操作符,const TestA&完全能够绑定到派生类的实例(因为继承是公共的)。

您编写的操作符实际上根本不需要。当您使用公共继承时,语言会自动为您完成这些工作。你可以完全去掉运算符,它的功能还是一样的。向上转换通常是好的,这就是你如何通过将父指针/引用分配给派生实例来使用继承。