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

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


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值