65,166
社区成员




#include <iostream>
#include <string>
using namespace std;
class Complex
{
protected:
// private:
int nR;
int nI;
public:
Complex(int tmpR = -100, int tmpI = -100);
virtual void display();
virtual ostream& print(ostream& os) const;
friend ostream& operator << (ostream&, const Complex&);
};
class NameComplex : public Complex
{
private:
string strName;
public:
NameComplex(const string& = "abc", int = -100, int = -100);
virtual void display();
virtual ostream& print(ostream& os) const;
// friend ostream& operator << (ostream&, const NameComplex&);
};
Complex::Complex(int tmpR, int tmpI) : nR(tmpR), nI(tmpI) {}
void Complex::display()
{
cout << nR << endl;
cout << nI << endl;
}
ostream& Complex::print(ostream& os) const
{
os << nR << ' ' << nI;
return os;
}
/*
ostream& operator << (ostream& os, const Complex& rhs)
{
os << rhs.nR << ' ' << rhs.nI;
return os;
}
*/
ostream& operator << (ostream& os, const Complex& rhs)
{
return rhs.print(os);
}
NameComplex::NameComplex(const string& str, int nR, int nI) : Complex(nR, nI), strName(str) {}
void NameComplex::display()
{
cout << strName << endl;
Complex::display();
}
/*
ostream& operator << (ostream& os, const NameComplex& rhs)
{
os << rhs.strName << ' ';
operator << (os, static_cast<Complex>(rhs));
return os;
}
*/
ostream& NameComplex::print(ostream& os) const
{
os << strName << ' ';
return Complex::print(os);
}
int main()
{
Complex a;
cout << a << endl;
NameComplex b;
cout << b << endl;
}