特殊运算符重载及注意点、继承、组合、修饰权限、菱形继承

2-13 特殊运算符重载及注意点

一、赋值运算符 = 重载
将⼀个对象赋值给另⼀个对象的时候 **,会调⽤赋值运算符重载函数 **
String str1;
String str2 = str1;//String str2(str1)调⽤拷⻉构造函数
str2 = str1;//调⽤赋值运算符重载函数
注意:
  • 如果没有⼿动添加它,编译器会提供⼀个默认的赋值运算符重载函数
  • C++ 强制规定,赋值运算符重载函数只能定义为类的成员函数
String& String::operator=(const String &other)
{
    if(this == &other){
        return *this;
}
    if(m_data != NULL){
        delete[] m_data;
}

    if(other.m_data != NULL){
        m_data = new char[strlen(other.m_data) + 1];
        strcpy(m_data,other.m_data);
}else{
        m_data = other.m_data;//NULL
}
    return *this;
}
二、左移运算符<<重载
/*
    String Str;
    str << "ab" << "cd" << "123";
    str.show();//"abcd123"
*/
String & String::operator<<(const char *str)
{
    int len = 0;
    char *oldStr = NULL;

    if(!str){
        return *this;
}
    if(this->str){
        len = strlen(this->str) + 1;
        oldStr = this->str;
}
    len += strlen(str);
    this->str = new char[len];
    if(oldStr){
        strcpy(this->str,oldStr);
        delete[] oldStr;
}else{
        this->str[0] = '\0';
}

    strcat(this->str,str);
    return *this;
}

三、不能被重载的运算符

⼤部分运算符都可以重载,以下运算符不能重载
四、注意点
  • C++ 中⼤部分运算符都可以重载,只有⼀⼩部分不可以重载,其中 "=“和”&" 不重载,编译器 默认⽀持
  • 重载运算符限制在 C++ 语⾔中已有的运算符范围内进⾏重载,不能创建新的运算符
  • 重载之后的运算符不能改变运算符的优先级和结合性,也不能改变运算符操作数的个数及语法 结构
  • 重载运算符函数不能有默认的参数,否则就改变了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值