【问题标题】:Overloading ostream friend operator with shared_ptr vector使用 shared_ptr 向量重载 ostream 朋友运算符
【发布时间】:2018-05-07 11:16:23
【问题描述】:

我试图重载 ostream 运算符作为类中的朋友来构建电路的组件,但是它一直返回地址。

在文件“Circuit_classes.h”的串联电路类中:

friend ostream& operator<< (ostream& os, series_circuit const& myCircuit);

在“Circuit_classes.cpp”文件中:

ostream& operator<<(ostream& os, series_circuit const& myCircuit){
    os << "Output: " << myCircuit.frequency << endl;
    return os;
}

其中frequency在类头文件中定义为60。

在我的主程序“AC Circuits.cpp”中

vector<shared_ptr<circuit>> circuit_vector;
circuit_vector.push_back(shared_ptr<circuit>(new series_circuit));
cout << circuit_vector[0] << endl;

程序运行时的命令行输出:

0325E180

【问题讨论】:

  • 什么是circuit_vector[0]?您operator&lt;&lt; 函数采用什么参数?这两种类型是一样的吗?
  • 我已经接受了DeiDei的回答,但供参考:电路向量[0]是.push_back添加的series_circuit类,它是从基础电路类派生的类。运算符
  • series_circuitcircuit 有什么关系?
  • series_circuit是基类circuit的派生类

标签: c++ class shared-ptr friend


【解决方案1】:
cout << circuit_vector[0] << endl;

circuit_vector[0] 产生一个std::shared_ptr,这是正在打印的内容。

您必须取消引用它才能访问对象本身。

cout << *circuit_vector[0] << endl;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多