由thinking in C++ 的一道题目引发的思考
如何对派生类的拷贝构造函数以及赋值运算符的重载进行编写
下面是一个实例,或许大家看了之后就明白了
#include<iostream>
#include<string>
using namespace std;
class Traveler
{
string str;
public:
Traveler(string s) : str(s) {}
Traveler(const Traveler& t)
{
str = t.str;
}
Traveler& operator=(const Traveler &t)
{
str = t.str;
return *this;
}
string showString()
{
return str;
}
};// class Traveler
class Pager
{
string str;
public:
Pager(string s) : str(s) {}
Pager(const Pager& t)
{
str = t.str;
}
Pager& operator=(const Pager &t)
{
str = t.str;
return *this;
}
string showString()
{
return str;
}
};// class Pager
class BusinessTraveler : public Traveler
{
Pager p;
public:
BusinessTraveler() : Traveler(""), p("") {} //default constructor
BusinessTraveler(string s,string r):Traveler(s),p(r){} // constructor
BusinessTraveler(const BusinessTraveler& b): Traveler(b),p(b.p) {} // copy-constructor
BusinessTraveler operator=(const BusinessTraveler& b) // operator assignment
{
Traveler::operator=(b);
p = b.p;
return *this;
}
friend ostream& operator <<(ostream& out, BusinessTraveler& b); //输出流重载
};
ostream& operator << (ostream& out, BusinessTraveler& b)
{
cout << b.showString() << " " << b.p.showString() ;
return out;
}
int main()
{
BusinessTraveler b1;
BusinessTraveler b2("Mike", "Pager1");
BusinessTraveler b3("Jane", "Page2");
BusinessTraveler b4(b2);
BusinessTraveler b5 = b3;
cout << b1 << endl;
cout << b2 << endl;
cout << b3<< endl;
cout << b4 << endl;
cout << b5 << endl;
}
/*
输出:
Mike Pager1
Jane Page2
Mike Pager1
Jane Page2
*/
第一次发博客。望大家提出问题所在,我会加以改正的 O(∩_∩)O谢谢