类方法的C++插入运算符
C++ insertion operator for class method
C++有没有办法将插入运算符用于类方法?
此operator<<
重载正在工作:
class Complex {
public:
//Normal overload:
friend std::ostream& operator<<(std::ostream &out, const Complex &o) {
out << "test overload";
return out;
}
Complex() {};
~Complex() {};
};
我可以这样做:
int main()
{
Complex* o = new Complex();
std::cout << "This is test: " << *o << "." << std::endl; // => This is test: test overload.
}
我知道流操纵器,像这样:
std::ostream& welcome(std::ostream& out)
{
int data = 1;
out << "WELCOME " << data << "rn";
return out;
}
int main()
{
std::cout << "Hello " << welcome; // => "Hello WELCOME 1rn"
}
如何将welcome
方法放入Complex
类中,然后如何从cout
调用它(请注意,欢迎方法必须访问一些类成员变量(?
我的试用版:
class Complex {
public:
//Normal overload:
friend std::ostream& operator<<(std::ostream &out, const Complex &o) {
out << "test overload";
return out;
}
std::ostream& welcome(std::ostream& out) {
out << "WELCOME " << data << "rn";
return out;
}
Complex() { data = 1; };
~Complex() {};
private:
int data;
};
int main()
{
Complex* o = new Complex();
std::cout << "This is test2: " << o->welcome << std::endl; // compile error
}
选择不同<<
重载的一种简单方法是使用不同的类型。
#include <iostream>
class Complex {
public:
//Normal overload:
friend std::ostream& operator<<(std::ostream &out, const Complex &o) {
out << "test overload";
return out;
}
struct extra_info {
const Complex& parent;
extra_info(const Complex& p) : parent(p) {}
friend std::ostream& operator<<(std::ostream& out, const extra_info& ei){
int i = 1;
out << "extrainfo " << i;
return out;
}
};
extra_info extrainfo() {
return {*this};
}
Complex() {};
~Complex() {};
};
int main() {
Complex c;
std::cout << c << "n";
std::cout << c.extrainfo();
}
输出:
test overload
extrainfo 1
我想在你的真实代码中你正在使用成员。因此,帮助程序类型必须包含对Complex
实例的引用。
相关文章:
- 重载运算符的范围是什么?它是否会影响作为类成员的集合的插入函数?
- 我的运算符重载是否有效<<(流插入)左操作数不是 ostream
- 重载嵌套结构/类的流插入运算符
- 屏幕插入运算符<<的运算符过载问题
- 类方法的C++插入运算符
- 在设计方面:重载vector类型的类成员的插入运算符
- 类重载运算符 '<' 插入指向该对象集的共享指针时不调用
- std::map 索引运算符与插入方法的性能
- 我在C++中遇到插入运算符错误
- 基类和派生类的虚拟插入运算符重载
- 如何在 std::map<const int、int> C++ 中重载插入运算符>>?
- 派生类 插入和提取运算符重载以及基类与派生类之间的强制转换
- 如何将重载>>运算符中输入的值插入到资源库
- 插入运算符的过载与使用二传手功能相比
- Visual Studio 15:重载"<<" C++中的插入运算符
- 使用 std::stringbuf 进行缓冲的效果,同时通过插入运算符'<<'执行写入
- 为什么当我使用额外的括号而不使用运算符重载时,插入运算符在 std::cout 中给出不同的结果?
- 带有指针的重载插入/提取运算符
- 编译器在遇到提取或插入运算符时处理信息(字符串、操纵器等)的顺序是什么?
- 插入运算符无法使用矢量,我不知道为什么