以下是可接受的编程实践:
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 赋值运算符的明显建议——这是关于是否应该或不应该以这种方式使用向上转换和/或转换运算符的问题)。
我还鼓励在评论中留下反馈以进行问题赞成/反对,以便我将来改进我的问题。