operator=、operator[]、operator()操作符重载
重载赋值运算符=
- 赋值运算符重载用于对象数据的复制
- 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()操作符重载相关推荐
- c++ operator百样操作符重载(详解)
目录 一.operator== :等号判断重载 二.operator = : 等号赋值重载 三.operator != : 不等于重载 四.operator> : 大于号 或者 小于号 重载 五 ...
- 10. C++操作符重载
在介绍C++中操作符重载之前,先介绍下C++标准库. 一.C++标准库 1. C++标准库并不是C++语言的一部分: 2. C++标准库是由C++语言编写而成的类库和函 ...
- C++学习之操作符重载总结
近期学习重载的几个小结: 操作符重载是C++的强大特性之一: 操作符重载的本质:通过函数拓展操作符的语义: operator 关键字是 操作符重载的关键: friend 关键字可以对 函数或类开发 访 ...
- C++ operator操作符重载(++,--,-,+,())
C++中++,--操作符重载需要说明是++(--)在操作数前面,还是在操作数后面,区别如下: 代码经过测试无误(起码我这里没问题^_^) Code 1#include <iostream> ...
- 深入new/delete:Operator new的全局重载
Operator new 的全局重载 原文地址:http://blog.csdn.net/zhenjing/article/details/4354880 我们经常看到这么一句话: operator ...
- C++ new/new operator、operator new、placement new初识
简要释义 1.operator new是内存分配函数(同malloc),C++在全局作用域(global scope)内提供了3份默认的operator new实现,并且用户可以重载operator ...
- operator 与operator
之前一直搞不懂operator 与&operator的区别. 简单来说就是operator 返回的是这个值,而&operator返回的是这个的地址. 主要的区别于用处就在于这个运算符的 ...
- operator和operator
// operator和&operator !#include <iostream> using namespace std; //声明 class Point; Point op ...
- C++编程进阶3(如何写出正确的operator=、operator运算符的返回值以及是否应该是成员函数的讨论)
八.如何写出一个安全的operator= 首先,operator=的返回值通常是一个类的引用,这一点需要和C++标准库的容器类的operator=保持一致 其次,如果一个类中含有指针成员,那么要防止自 ...
最新文章
- 使用SVN+Axure RP 8.0创建团队项目
- java speex回声消除_speex 回声消除的用法
- 数据结构32:树存储结构
- 【亚马逊AWS】入门级别实践
- Windows Server 2008 R2卸载干净ORACLE 11G
- 博客园屏蔽广告CSS
- 【常用技巧】标准模板库(STL)
- POJ-3154-Graveyard
- ODBG常用快捷键总结
- 证明人工智能的数据只要足够多,就可以接近理想效果
- java 数组map_Java之数组array和集合list、set、map
- AD19调用器件封装时报错Access violation at address 0000000141A9EDD4 in module 'IntegratedLibrary.DLL'.
- 047 Permutations II 有重复数字的全排列
- 一个U盘制作多个系统
- java开发常用的工具类_java开发常用工具类
- FL Studio 20.8中文进阶高级完整版 安装下载教程
- python运维开发实战
- 2023年天津天狮学院专升本专业课考试延期的通知
- 2022-2028年中国医用纺织品行业市场发展潜力及投资风险预测报告
- 微软的MSR paraphrase数据集