12.赋值运算符的重载

1.有时候希望赋值运算符两边的类型可以不匹配,比如,把一个int类型变量赋值给一个complex对象,或者把一个char*类型的字符串赋值给一个字符串对象,此时就需要重载赋值运算符=。
赋值运算符“=”只能重载为成员函数。

class string
{
    private:
        char *string;
        public:
            string():str(new char[1]){str[0]=0;};
            const char *c_str() {return str;};
            string &operator = (const char *s);
            ~string(){delete []str;};
};
string & string::operator = (const char *s)
{
    delete []str;
    str=new char[strlen(s)+1];
    strcpy(str,s);
    return *this;
}/*思考如果string S1=S2;会怎么样呢?会造成什么错误呢?这里使用复制构造函数初始化,所以需要写一个复制构造函数。如果没有写,就是一个浅拷贝*/

int main()
{
    string s;
    s="good luck";  //等价于s。operator=("good luch");
    cout<<s.c_str()<<endl;
    //string s2="hello"; //如果没有注释掉就是错误的。因为这里是复制构造函数初始化的。
    s="shenzhou 7";
    cout << s.c_str()<<endl;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值