#include <iostream> using namespace std; class CStudent { public: int nAge; }; ostream&operator<<(ostream& o, const CStudent &s) { o << s.nAge; return o; }
int main() { CStudent s; s.nAge = 5; cout << s << "hello"; return 0; }
— — — — — — — — —
#include <iostream> #include <string> #include <cstdlib>
using namespace std; class Complex { double real, image; public: Complex(double r = 0, double i= 0) :real(r), image(i) {}; friend ostream & operator<<(ostream & os, const Complex&c); friend istream & operator>>(istream & is, Complex&c); };
ostream & operator<<(ostream & os, const Complex & c) { os << c.real << "+" << c.image << "i"; return os; } istream & operator>>(istream & is, Complex & c) { string s; is >> s; int pos = s.find("+", 0); string sTmp = s.substr(0, pos); c.real = atof(sTmp.c_str()); sTmp = s.substr(pos + 1, s.length() - pos - 2); c.image = atof(sTmp.c_str()); return is; }
int main() { Complex c; int n; cin >> c >> n; cout << c << "," << n; return 0; }
String &String::operator = (const String & s) { if (str == str.str) return *this; if (str) delete[]str; if(s.str){ str = new char[strlen(s.str) + 1]; strcpy(str, s.str); } else str = NULL; return *this; }为了避免两个指针指向同一string,重复释放内存的问题,我们用strcpy。复制构造函数也一样String::String(String & s) { if (s.str) { str = new char[strlen(s.str) + 1]; strcpy(str, s.str); } else str = NULL; }
No comments:
Post a Comment