c++ - 访问包含它的 vector 元素时,类对象的运算符重载不起作用?

标签 c++ c++11 vector operator-overloading

我已经完成了以下运算符重载,它在以下类对象上按预期工作。 但是当我将这个指针传递给 vector 中的类对象时,输出流不起作用 (按照我定义的方式)

对于这类问题,我很抱歉,但我是 C++ 的新手,我不知道如何准确地提出这个问题。

运算符重载:(shape.cpp)

ostream &operator<<(ostream &output, Shape &S)
{
    output << S.name << " (" << S.id << ") " << endl;
    return output;
}

内部形状类(shape.h): friend ostream& operator<<(ostream& output, Shape &S);

ma​​in.cpp:

#include <iostream>
#include <vector>
using std::cout;
int main()
{
    vector<Shape*> array;
    Shape * s1 = new Shape("Square");

    array.push_back(s1);
    cout << *s1; //Prints "Square (1)" 
    cout << array[0]; //Prints "007CADC8" maybe hex address of vector element?

    return 0;
}

最佳答案

这失败了,因为你正在输出 Shape * ,类似于如果你做了 cout << s1 会发生什么.您需要执行与前一行相同的操作并取消引用 vector 中包含的指针:

cout << *array[0];

关于c++ - 访问包含它的 vector 元素时,类对象的运算符重载不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27608431/

相关文章:

c++ - 如何从类访问结构?

c++ - 为什么我不能运行 C++11?

c++ - 当对象类型是模板参数时,有没有办法将模板参数传递给对象上的函数?

c++ - 无法将指针分配给继承类的方法

c++ - 线程化传递字符串参数的 bool 函数

c++ - 是否还可以自定义STL vector 的 "reference"类型?

r - 在 R 中,将向量随机分成 k 个 block ?

r - 按行而不是列取消列出数据框

c++ - 我的矩阵类在初始化时崩溃

c++ - Libusb如何从端口读取字符