可接受的编程实践.转换和转换
Acceptable programming practice - conversion and upcasting
以下是可接受的编程实践:
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&
完全能够绑定到派生类的实例(因为继承是公共的)。
您编写的操作符实际上根本不需要。当您使用公共继承时,语言会自动为您完成这些工作。你可以完全去掉运算符,它的功能还是一样的。向上转换通常是好的,这就是你如何通过将父指针/引用分配给派生实例来使用继承。
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- 如何将可变参数模板转换为多个单个模板?(C++竞争编程调试模板)
- 罗马数字C++编程转换问题
- Windows编程:为什么我们要将lParam转换为CREATESTRUCT来获取应用程序状态
- 是否可以使用元编程将类型列表转换为对列表中每种类型具有特定隐式转换行为的新类型?
- 如何使用模板元编程在 C++17 中将一种类型转换为另一种类型
- 如何将高级/低级编程代码直接转换为机器代码
- 如何将C++套接字编程代码转换为C#
- 是否可以以编程方式将 SQLite 数据库转换为 C/C++ 中的 SQL 语句
- 如何将基于文本的编程代码(存储在DB中)转换为实际的编程代码
- 将C#系统转换为跨平台应用程序的最佳编程语言
- 如何通过编程将44100立体声转换为11025单声道
- C编程:将函数从MATLAB转换为C,结果略有不同(但明显不同)
- 可接受的编程实践.转换和转换
- 如何将flv视频转换为mp3使用ffmpeg编程
- 在屏幕上转换对象可编程管道
- 存储类型并以编程方式将另一个变量强制转换为存储的类型