#include 目录 输入和输出操作符 算术操作符和关系操作符 下标操作符 自加、自减操作符 成员访问操作符 1 输入和输出操作符 1.1 输出操作符 1.1.1 示例 复制代码 #include #include using namespace std; class A { friend ostream& operator<<(ostream& out, const A& a); public: A(const string &s = "", int v = 0) : ss(s), val(v) {} //构造函数带默认参数 private: int val; string ss; }; ostream& operator<<(ostream& out, const A& a) { out << "a.ss:" << a.ss << " " << "a.val:" << a.val; return out; } int main() { A a("hello", 23); cout << a << endl; A b; cout << b << endl; } 复制代码 结果 1.1.2 说明 1)IO操作必须为非成员函数 原因:I/O操作的接口返回的是ostream&对象(只有返回左值,这样才可以连续的输出,例如cout << a << b)。自定义的输出操作符应该与其相似。如果将其定义为成员函数(有个首默认参数this,即指向自己的指针),左操作数只能是该类型的对象,则没法办到。例如:Sales_item; item << cout; 与常规定义相反,因此只能为非成员函数。 2)因为要访问指定类的私有成员,所以在该类中声明输出操作符为友员函数。 3)第一个形参必须为引用。因为I/O对象不可以复制。同理返回值必须为一个引用。 4)第一个形参不可以为const,因为写入到流会改变其值。 5)第二个为引用,这样可以避免复制。参数可以为const,可以接收const对象和非const对象;否则,如果为非const,则只能接收非coust对象。一般为const,毕竟只是输出而已,不改变对象。 1.2 输入操作符 1.2.1 示例 复制代码 #include #include using namespace std; class A { friend ostream& operator<<(ostream& out, const A& a); friend istream& operator>>(istream& in, A& a); public: A(const string &s = "", int v = 0) : ss(s), val(v) {} private: int val; string ss; }; ostream& operator<<(ostream& out, const A& a) { out << "a.ss:" << a.ss << " " << "a.val:" << a.val; return out; } istream& operator>>(istream& in, A& a) { in >> a.ss >> a.val; if(in) { cout << "Input right" << endl; } else { cout << "in.fail:" << in.fail() << endl; cout << "input wrong!" << endl; } return in; } int main() { A a("hello", 23); cout << a << endl; A b; cin >> b; cout << b << endl;古天乐代言太阳集团城-主页(欢迎您)
[c++]重载操作符
地址:山东省济南市舜耕路泉城公园东门园内向北50米 鲁ICP备07011972号 版权所有2008-2013 古天乐代言太阳集团城主页