10 chapter 运算符重载:string类(cpp大学教程)学习笔记

  • 10.1 表准库中string类的重载运算符
    • 重载运算符有==,!=,>,<,<=,>=
    • 注意:String类中重载的“[ ]”运算符不提供边界检查功能,而标准的string类在其成员函数中at提供了边界检查功能
  • 10.2 运算符重载的基础知识
    • 注意
      • 要在类上使用运算符,必须重载运算符(=、&、,除外)
      • 如果重载运算符定义为成员函数,则必须为非static,因为他们必须由该类调用并作用于自身
    • 不能被重载的运算符
      • . 和 .* 和 :: 和 ?:
    • 运算符重载的规则
      • 运算符的优先级、结合律、元数不会被改变
      • 不能创建新的运算符,只能在现有的运算符基础上重载
      • 重载()、[]、->时必须为成员函数
    • 重载二元运算符
      • class String{public: bool operator<(const String &) const; ....};重载为成员函数,实际效果相当于string1.operator<(string2)
      • class String{bool operator<(const String &, const String &);};重载为非成员函数,实际效果相当于operator<(string1, string2)
      • 重载二元流插入运算符和流输入运算符
        • friend ostream &operator<<(ostream &, const PhoneNumber &);
        • friend istream &istream>>(istream &, PhoneNumber &);
        • 注意:必须定义为非成员函数,类对象为右值,因为需要访问类中的私有成员数据,因此声明为友元函数friend
    • 重载一元运算符
      • class String{bool operator!(const String &); public: bool operator!() const;};
      • 重载一元前置和后置运算符:++、--
        • 前置运算符重置
          • 作为成员函数
            • Date &operator++();
          • 作为非成员函数
            • Date &operator++(Date &);
        • 后置运算符重置
          • 作为成员函数
            • Date operator++(int);
          • 作为非成员函数
            • Date operator++(Date &, int);
          • 提示:参数int实际提供的实参是“0”这个哑值,用于区分是前置还是后置。因为后置运算符返回的是对象自增前的副本,因此不作引用
  • 10.3 动态内存管理
    • 使用new来动态获取内存
      • 动态内存的初始化
        • Time *timePtr = new Time();//new返回一个指向该新创建对象的指针
        • int *gradesArray = new int[10]();//初始化一个内置数组
          • 动态分配的数组大小可以是求值表达式,而原本创建的内置数组必须是常量整数
        • int *gradesArray = new int[10]{};//使用列表初始化一个内置数组
          • 实现列表初始化的声明
            • Array::Array(initializar_list<int> list);//首先要包含头文件<initializar_list>
      • 注意:若new无法在内存中为对象找到足够的空间,就会抛出异常
    • 使用delete动态释放内存
      • delete timePtr;
      • delete []gradesArray;
        • delete内置数组时必须加上[]
      • 补充:delete先调用对象的析构函数,在回收其内存
      • 注意
        • delete只能释放使用new分配的内存
        • delete后的指针最好将其设置为nullptr
  • 10.4 类型转换
    • 转换运算符(强制类型转换运算符)
      • MyClass::operator char *() const;
      • 不指定返回类型,并且必须为非static成员函数,因为其返回类型正是我们要转换的类型,无法具体确定
  • 10.5 explicit构造函数与转换运算符
    • explicit的构造函数必须是单个参数
    • 声明为explicit的构造函数不可以被隐式构造
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值