— 1 — 重载 C++ 在输出内容时,最常用的方式: std::cout << 1 <<"hello"; 提出问题: 那这条语句为什么能成立呢? cout 是什么?...对于如下这条语句: std::cout << 1 <<"hello"; 有可能按以下的方式重载成 ostream 类的成员函数: ostream & ostream::operator<<(int n...: cout.operator<<(1); 02 数据类型是字符串类型时: std::cout << "hello"; 上面的语句,等价于: cout.operator<<("hello"); 03 数据类型组合使用时...: std::cout << 1 <<"hello"; 上面的语句,等价于: ( cout.operatoroperator<<("hello"); — — 假定我们要想把某个对象里的内容进行打印输出...,那么我们可以重载 ostream 类的流插入 << 运算符。
basic_ostream中查找operator重载版本。...在头文件ostream中查找basic_ostream的定义,发现其中operator重载了17次,其中的一种: typedef basic_ostream<_Elem, _Traits..._DEBUG_POINTER(_Pfn); return ((*_Pfn)(*this)); } 在ostream类中,operator重载方式如下: ostream& ostream...::operatorostream& (*op)(ostream&)) { return (*op)(*this); } 这个重载正好与endl函数的申明相匹配,所以重载形式: ostream& ostream::operatorostream& (*op)(ostream&)); 所以只要编写一个返回值为std::ostream&,接收一个类型为std
basic_ostream中查找operator重载版本。...在头文件ostream中查找basic_ostream的定义,发现其中operator重载了17次,其中的一种: typedef basic_ostream<_Elem, _Traits...manipulator _DEBUG_POINTER(_Pfn); return ((*_Pfn)(*this)); } 在ostream类中,operator重载方式如下...: ostream& ostream::operatorostream& (*op)(ostream&)) { return (*op)(*this); } 这个重载正好与...重载形式: ostream& ostream::operatorostream& (*op)(ostream&)); 所以只要编写一个返回值为std::ostream&,接收一个类型为std
比如 #include class Sample { friend std::ostream& operatorstd::ostream &out, const Sample...& smp); private: int _m = 0; }; std::ostream& operator std::ostream &out, const Sample& smp)..._m; } private: int _m = 0; }; std::ostream& operator std::ostream &out, const Sample& smp...#include class Sample { friend std::ostream& operatorstd::ostream &out, const Sample..._m; return *this; } private: int _m = 0; }; std::ostream& operator std::ostream
friend ostream& operatorostream& out, Student& s); } 在 类外部 实现 友元函数 , // Student 类的友元函数 // 左移运算符重载...::basic_ostreamstd::char_traits > & __cdecl operatorstd::basic_ostreamostream@DU?$char_traits@D@std@@@std@@AAV01@AAV?... ; template class Student { // 左移运算符重载 friend ostream& operator (ostream...Student { // 左移运算符重载 friend ostream& operator (ostream& out, Student& s); public: // 构造函数
; Person(){}; Person(int x, int y) :m_x(x), m_y(y) {} }; ostream& operator ostream &cout, Person...#include #include using namespace std; class Person { friend ostream& operator...y) :m_x(x), m_y(y) {} }; ostream& operator ostream &cout, Person &ptr) { cout << "m_x = " << ptr.m_x...: #include #include using namespace std; class MyInteger { friend ostream& operator...= *this; m_count++; return tmp; } }; ostream& operatorostream& cout, MyInteger & myInt) {
; 代码示例 : #include "iostream" using namespace std; class Student { // 左移运算符重载 friend ostream& operator...ostream& operatorostream& out, Student& s) { out << "a:" << s.a << " b: " << s.b << endl; return...friend ostream& operatorostream& out, Student& s2) { out << "a:" << s.a << " b: " << s.b << endl...; template class Student { // 左移运算符重载 friend ostream& operatorostream& out, Student...//ostream& operatorostream& out, Student& s) //{ // out << "a:" << s.a << " b: " << s.b << endl;
3.重载的形式 对输出操作重载,只能采用友元函数的形式进行,而不能将operatorostream类的成员函数。...所以,要将类someClass的对象输出到标准输出对象,只能采用将operator重载为全局函数,申明为someClass类的友元的形式进行。...而且,这时的输出操作符函数原型下述五种形式之一: ostream& operatorostream&,const someClass&); 或者 ostream& operatorostream...&,const someClass*); ostream& operatorostream&, someClass&); 或者 ostream& operatorostream&, someClass...这种函数重载,既安全又高效。 对于输入操作符>>进行重载,也是能采用友元函数的形式进行,而不能讲operator>>()申明为istream类的成员函数。
ostream& operator ostream& out,Test &temp) { temp.outmembers(out); return out; }...& operator ostream &out),迫不得已将ostream类型的引用参数放到了后面,这是因为,成员方式运算符重载函数第一个参数会被隐藏,而且一定是当前类类型的,这和ostream...&out) = 0; friend ostream& operator ostream& ,Student&); protected:...int age; char name[50]; }; ostream& operator ostream& out,Student &temp)...Academician与多重继承类GraduateStudent的outmembers成员函数,由于ostream& operator ostream& out,Student &temp) 运算符重载函数是
本文链接:https://blog.csdn.net/weixin_42528266/article/details/102756552 运算符重载(operator overload) 运算符重载(...操作符重载):可以为运算符增加一些新的功能 #include #include "Point.h" using namespace std; // operator overload...++; return point; } ostream &operatorostream &cout, const Point &point) { return cout << "(" <<...Point { friend ostream &operatorostream &, const Point &); int m_x; int m_y; public: Point(int...; class String { friend ostream &operatorostream &, const String &); public: String(const char
; template class Student { // 左移运算符重载 friend ostream& operator (ostream& out, Student...函数 template ostream& operatorostream& out, Student& s) { out ostreamstd::char_traits > & __cdecl std::std::basic_ostreamstd@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@AAV?...; template class Student { // 左移运算符重载 friend ostream& operator (ostream& out, Student
定义 运算符重载的 实质 是 函数的重载 使用意义 赋予操作符更多的意义,同一个运算符,对不同类型的操作数,所发生的行为不同是 程序更加简洁 写法格式:返回值 operator运算符(参数列表){}...因为第一个操作类是ostream或istream。...而我们无法在ostream和istream中定义重载方法,所以只能使用类的友元方法或全局方法来重载 示例 Array.h // // Created by eric on 2017/8/14. //...; friend ostream &operatorostream &out, Array &array); friend istream &operator>>(istream...&operatorostream &out, Array &array) { cout operator<<" << endl; for (int i = 0; i <
ostream: __ostream_type& basic_ostream::operator<<(int __n); // 下列代码有什么问题,如何修改?...::ostream& operator std::ostream& os) { os << m1 << m2; return os; } }; int main...() { A a(1,2); std::cout << a; return 0; }; 类basic_ostream没有成员函数“operator <<(const...A&)”, 也不存在全局的: operator ostream&, const A&) 而只有左操作数是自己时才会调用成员重载操作符, 都不符合,所以语法错误。...有两种修改方式: 1) 将“std::cout operator std::cout)”, 2) 或定义全局的: std::ostream& operatorstd
#include #include using namespace std;class MyPrint{public: void operator()(string...#include #include using namespace std;class Person{ friend ostream& operatorostream...& operator ostream &cout, Person &ptr){ cout " #include using namespace std;class MyInteger{ friend ostream& operatorostream& operatorostream& cout, MyInteger & myInt){ cout << myInt.m_count
[](int idx); // ==运算符重载 bool operator==(const CMyString& another); // + 运算符重载 CMyString...operator+(const CMyString& another); // 流输入输出 friend std::ostream& operatorstd::ostream&...os, CMyString& another); friend std::istream& operatorstd::istream& is, CMyString& another);...::ostream& operatorstd::ostream& os, CMyString& another) { os << another.m_str; return os;...} std::istream& operatorstd::istream& is, CMyString& another) { // 先删除了原来保存的数据 delete []
5.4.1.1 使用友元函数重载 << 这是使用友元函数重载 << 运算符的方式: // Date 类的友元声明 class Date { friend std::ostream& operator...std::ostream& out, const Date& d); // 其他成员变量和函数 }; // 实现 << 运算符 std::ostream& operatorstd:...{ public: std::ostream& operatorstd::ostream& out) const; // 其他成员变量和函数 }; // 实现成员函数 std::...ostream& Date::operatorstd::ostream& out) const { out << _year << "-" << _month << "-" << _day...例如,友元函数可以直接访问 Date 类的 _year、_month 和 _day 成员: std::ostream& operatorstd::ostream& out, const Date&
& stream, Vec2D& v1); friend std::ostream& operatorstd::ostream& stream, const Vec2D& v1); Vec2D...,下面我们来看一下具体的实现 2|22.2 实现运算符重载 toString函数 这个函数我就不多说啦,比较简单 std::string Vec2D::toString() { std::string...来实现的 记得在最后返回istream或者ostream对象 istream& operator>>(istream& stream, Vec2D& v1) { double x, y; stream...>> x >> y; v1.setX(x); v1.setY(y); // 也可以直接 // stream >> x_ >> y_; return stream; } ostream& operator...ostream& stream, const Vec2D& v1) { std::string res = "(" + std::to_string(v1.getX()) + ", " + std
递增运算符重载 作用: 通过重载递增运算符,实现自己的整型数据 重载前置递增运算符 class MyInteger { friend ostream& operatorostream& out...//先++ m_Num++; //再返回 return *this; } private: int m_Num; }; //左移运算符重载 ostream& operator using namespace std; class MyInteger { friend ostream& operatorostream& out, MyInteger myint)...+; m_Num++; return temp;//拷贝构造 } private: int m_Num; }; //左移运算符重载 ostream& operatorostream...#include using namespace std; class MyInteger { friend ostream& operatorostream& out,
Time operator*(double m, const Time & t) { return t * m; // use t.operator*(m) } 有种常用的运算符重载operatorostream & os, const Time & t) { os << t.hours << " hours, " << t.minutes << " minutes...可以进行修改,加上个引用使返回值返回cout ostream & operatorostream & os, const Time & t) { os std::ostream& operatorstd::ostream& os, const Time& t); }; Time::Time() { hours =...::ostream& operatorstd::ostream& os, const Time& t) { os << t.hours << " hours, " << t.minutes
~ 》重载为全局函数把ostream/istream放到第⼀个形参位置,第二个形参位置是类类型对象 #include using namespace std; class...ostream& out 只可以使用引用,ostream类不支持拷贝 friend void operatorostream& out, const Example& e); }; //类外使用友元函数...& operatorostream& out, const Example& e); friend istream& operator>>(istream& in, Example& e); }...; //类外使用友元函数 ostream& operatorostream& out, const Example& e) { out << "(_x,_y) = " << "(" << e...._y; } friend ostream& operatorostream& out, const Example& e); friend istream& operator>>(istream
领取专属 10元无门槛券
手把手带您无忧上云