C++ 派生类中的拷贝构造函数以及赋值运算符重载问题

来源:互联网 发布:合金装备5幻痛捏脸数据 编辑:程序博客网 时间:2024/06/08 00:07

由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谢谢


0 0