对于内置数据类型,编译器知道如果cout进行<<运算符输出,对于自定义数据类型,无法输出。于是便想到重载左移运算符。
一、利用成员函数
#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; class C { public: C() {}; C(int a, int b):m_A(a),m_B(b) {} int m_A; int m_B; //利用成员函数 实现 <<运算符重载 void operator<<(ostream& cout) { cout << "m_A=" << this->m_A << "m_B = " << this->m_B; } }; void test01() { C p1(10, 10); p1<<cout; } int main() { test01(); system("pause"); return 0; }
显而易见p1只能写在<<的左侧。
二、全局函数
#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; class C { public: C() {}; C(int a, int b):m_A(a),m_B(b) {} int m_A; int m_B; }; //利用全局函数 实现 <<运算符重载 void operator<<(ostream& cout, Person& p) { cout << "m_A=" << p.m_A << "m_B = " << p.m_B; } void test01() { C p1(10, 10); cout<<p1; } int main() { test01(); system("pause"); return 0; }
但是这种写法,不能自动换行,于是
#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; class C { public: C() {}; C(int a, int b):m_A(a),m_B(b) {} int m_A; int m_B; }; //利用全局函数 实现 <<运算符重载 ostream& operator<<(ostream& cout, Person& p) { cout << "m_A=" << p.m_A << "m_B = " << p.m_B; } void test01() { C p1(10, 10); cout<<p1<<endl; } int main() { test01(); system("pause"); return 0; }
并且,如果类的属性为私有权限,还可以配合友元使用