重载赋值运算符=

  • 赋值运算符重载用于对象数据的复制
  • operator= 必须重载为成员函数
  • 重载函数原型为:类型  &  类名  :: operator= ( const  类名 & ) ; 
#pragma warning(disable : 4996)
#include <iostream>
using namespace std;class Name
{
public:Name(const char* c){len = strlen(c);this->m_name = new char[len + 1];strcpy(this->m_name, c);cout << "构造函数" << endl;}//返回值当左值需要返回一个引用Name &operator=(const Name &n){//先释放旧的内存if (this->m_name != NULL){delete[] m_name;len = 0;}//根据新的对象分配新的内存大小len = n.len;this->m_name = new char[len+1];//把新的值赋值给当前变量strcpy(this->m_name, n.m_name);return *this;}void GetName(){cout << "Name = " << m_name << endl;}~Name() {cout << "析构函数" << endl;}
private:char *m_name;int len;
};void PlayObj()
{Name n1("ZhangSan");n1.GetName();Name n2("WangWu");n2.GetName();Name n3 = "LiSi";n3.GetName();n3 = n2 = n1;n3.GetName();
}int main()
{PlayObj();system("pause");return 0;
}

重载=操作符的步骤:

1、释放当前旧的内存

2、根据新的对象分配新的内存大小

3、把新的值赋值给当前变量

重载赋值运算符[]

  • 运算符 [] 和 () 是二元运算符
  • [] 和 () 只能用成员函数重载,不能用友元函数重载

[] 运算符用于访问数据对象的元素,重载格式 类型  类 :: operator[]  ( 类型 ) ;

class Vector
{
public:Vector(int n){size = n;v = new int[size];}int & operator[](int n){return v[n];}~Vector(){delete[] v;size = 0;}
private:int *v;int size;
};void PlayObj()
{Vector v(5);for (int i = 0; i < 5; i++){v[i] = i + 1;}cout << "v[3] = " << v[3] << endl;
}int main()
{PlayObj();system("pause");return 0;
}
 v[i] = i + 1;

看上面的语句,v[i]作左值,因此需要返回一个引用。

重载函数调用符 ()

  • 运算符 [] 和 () 是二元运算符
  • [] 和 () 只能用成员函数重载,不能用友元函数重载

() 运算符用于函数调用,重载格式 类型  类 :: operator()  ( 表达式表  ) ;

class Complex
{
public:double FunAddr(double x, double y){return x * x + y * y;}double operator()(double x, double  y){return x * x + y * y;}
};void PlayObj()
{Complex c;cout << "Addr = " << c.FunAddr(2.5, 3.5) << endl;cout << "Addr = " << c(2.5, 3.5) << endl;
}int main()
{PlayObj();system("pause");return 0;
}

为什么不要重载&&和||操作符

1、&&和||是C++中非常特殊的操作符

2、&&和||内置实现了短路规则

3、操作符重载是靠函数重载来完成的

4、操作数作为函数参数传递

5、C++的函数参数都会被求值,无法实现短路规则

operator=、operator[]、operator()操作符重载相关推荐

  1. c++ operator百样操作符重载(详解)

    目录 一.operator== :等号判断重载 二.operator = : 等号赋值重载 三.operator != : 不等于重载 四.operator> : 大于号 或者 小于号 重载 五 ...

  2. 10. C++操作符重载

    在介绍C++中操作符重载之前,先介绍下C++标准库. 一.C++标准库 1. C++标准库并不是C++语言的一部分:                 2. C++标准库是由C++语言编写而成的类库和函 ...

  3. C++学习之操作符重载总结

    近期学习重载的几个小结: 操作符重载是C++的强大特性之一: 操作符重载的本质:通过函数拓展操作符的语义: operator 关键字是 操作符重载的关键: friend 关键字可以对 函数或类开发 访 ...

  4. C++ operator操作符重载(++,--,-,+,())

    C++中++,--操作符重载需要说明是++(--)在操作数前面,还是在操作数后面,区别如下: 代码经过测试无误(起码我这里没问题^_^) Code  1#include <iostream> ...

  5. 深入new/delete:Operator new的全局重载

    Operator new 的全局重载 原文地址:http://blog.csdn.net/zhenjing/article/details/4354880 我们经常看到这么一句话: operator ...

  6. C++ new/new operator、operator new、placement new初识

    简要释义 1.operator new是内存分配函数(同malloc),C++在全局作用域(global scope)内提供了3份默认的operator new实现,并且用户可以重载operator ...

  7. operator 与operator

    之前一直搞不懂operator 与&operator的区别. 简单来说就是operator 返回的是这个值,而&operator返回的是这个的地址. 主要的区别于用处就在于这个运算符的 ...

  8. operator和operator

    // operator和&operator !#include <iostream> using namespace std; //声明 class Point; Point op ...

  9. C++编程进阶3(如何写出正确的operator=、operator运算符的返回值以及是否应该是成员函数的讨论)

    八.如何写出一个安全的operator= 首先,operator=的返回值通常是一个类的引用,这一点需要和C++标准库的容器类的operator=保持一致 其次,如果一个类中含有指针成员,那么要防止自 ...

最新文章

  1. 使用SVN+Axure RP 8.0创建团队项目
  2. java speex回声消除_speex 回声消除的用法
  3. 数据结构32:树存储结构
  4. 【亚马逊AWS】入门级别实践
  5. Windows Server 2008 R2卸载干净ORACLE 11G
  6. 博客园屏蔽广告CSS
  7. 【常用技巧】标准模板库(STL)
  8. POJ-3154-Graveyard
  9. ODBG常用快捷键总结
  10. 证明人工智能的数据只要足够多,就可以接近理想效果
  11. java 数组map_Java之数组array和集合list、set、map
  12. AD19调用器件封装时报错Access violation at address 0000000141A9EDD4 in module 'IntegratedLibrary.DLL'.
  13. 047 Permutations II 有重复数字的全排列
  14. 一个U盘制作多个系统
  15. java开发常用的工具类_java开发常用工具类
  16. FL Studio 20.8中文进阶高级完整版 安装下载教程
  17. python运维开发实战
  18. 2023年天津天狮学院专升本专业课考试延期的通知
  19. 2022-2028年中国医用纺织品行业市场发展潜力及投资风险预测报告
  20. 微软的MSR paraphrase数据集

热门文章

  1. html语言单词背不下来,专八词汇背不下来?来看看这七种记忆方法
  2. 品尝小坚果, Test the nutz ! nutz入门
  3. 买新不买旧?选购固态硬盘的几点建议
  4. 重复造轮子,对此你的看法
  5. HMS Core助力同程旅行,打造更贴心的用户出行体验
  6. 被拒绝100天 Rejection Therapy 100 Days
  7. 干货 | 拐点已至,云原生引领数字化转型升级
  8. 不眠者-泽队:广东省工科赛—全地形越障排爆组(开源7天)
  9. 戒烟-这书能让你戒烟pdf
  10. 凡客紧缩之困:极致单品难撑大局 小米化或为了出售