数组指针上的 c++ 运算符重载<<
c++ operator overloading << on Array pointers
我有两个类,Pony
和Bear
,它们继承自一个Animal
抽象类。
我制作了一个包含Pony
和一个Bear
的Animal
数组:
Animal **arr = new Animal * [2];
arr[0] = new Pony("pony name");
arr[1] = new Bear("bear name");
小马和熊的论据是它的名字。然后,我想通过加载<<
运算符来打印动物名称。类似的东西
cout << arr[0]; // Print something like : "I am Pony/Bear Name !"
但是我的超载测试失败了...我尝试做类似的事情
ostream & operator<<(ostream& os, Animal &a);
但是当我编译时它没有检测到过载...
如何在我的指针数组中重载<<
运算符?
测试后完全错误 *arr[0]
main.cpp: In function ‘Object** MyUnitTests()’:
main.cpp:20:22: error: no match for ‘operator<<’ in ‘std::cout << * * obj’
main.cpp:20:22: note: candidates are:
In file included from /usr/include/c++/4.7/iostream:40:0,
from Object.hh:14,
from main.cpp:11:
然后是来自 std::cout 的 200 行错误(如果我删除 arr[0] 上的 *,它们就会消失)。
arr[0]
是一个指针,因此您需要执行间接寻址才能将其传递给该operator<<
重载:
cout << *arr[0];
你使用new
比你应该做的要多得多。我会让你了解动物本身,因为你需要多态性(尽管你应该使用智能指针代替),但指针数组不需要动态分配:
Animal* arr[2];
相关文章:
- C++重载<<具有typedef'd std::vector
- 重载运算符<<:此运算符函数的参数太多
- 在VS 2012上编译,但不使用Netbeans/MinGW-重载<<
- 重载运算符<<用于模板类.即使使用好友关键字也无法获得私人会员
- C++分离成员流重载<<
- 我已经完成了<<运算符重载,但它'It’不起作用
- 重载运算符<<输出地址而不是数据成员
- 重载运算符<<用于ostream语法
- 重载operator< & lt;作为会员打印
- Operator< & lt;重载隐藏其他
- 重载& lt; & lt;为什么我得到以下错误
- 重载ostream&时转换错误无效;operator< & lt;
- operator< & lt;在c++中为类中的类重载
- 重载& lt; & lt;用于打印自定义异常的操作符
- 重载<<运算符错误C2804:二进制'运算符<<'参数太多
- 上Ostream & lt; & lt;重载的困惑
- 重载& lt; & lt;为了我的班级
- 使用带有重载<<endl上的运算符
- 重载& lt; & lt;使用命名空间std
- operator< & lt;重载、名称空间和模板