数组指针上的 c++ 运算符重载<<

c++ operator overloading << on Array pointers

本文关键字:lt 重载 运算符 c++ 指针 数组      更新时间:2023-10-16

我有两个类,PonyBear,它们继承自一个Animal抽象类。

我制作了一个包含Pony和一个BearAnimal数组:

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];