博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++学习笔记07
阅读量:6516 次
发布时间:2019-06-24

本文共 1907 字,大约阅读时间需要 6 分钟。

运算符函数的定义格式二:成员函数

    返回类型operator运算符(除第一个操作数之外的参数表)

    双目:运算结果类型operator运算符(第二个操作数)

    单目:运算结果类型operator运算符()

    以成员函数形式定义时,第一个操作数作为了当前对象,不需要作为实参传递,只需要传递剩余的操作数就可以了。在运算符函数里可以通过*this或者this->来访问第一个操作数。

    规定只能用成员函数的[],(),=,->,类型转换

    如果有指针成员指向动态内存,还应该自己写复制运算符函数来实现跟拷贝构造函数相似的功能。三大:拷贝够着、赋值、析构

//[]{}->=type 这些运算符只能是成员函数#include
#include
using namespace std;class S{ char* p; int len;private: S(const S& x);//私有拷贝构造,禁止拷贝public: S(const char* str=""){ len = strlen(str); p = new char[len+1]; strcpy(p,str); } ~S(){ delete[] p;p=NULL; } S& operator=(const S& s1){
//以当前对象作为赋值结果 成员函数 if(&s1==this) return *this; // 如果传入参数是自己,就直接返回 len = s1.len; delete[] p;//释放旧的动态内存 p=new char[len+1];//为p开辟新动态内存 strcpy(p,s1.p);//复制动态内存中的字符串过来 return *this;//返回当前对象 } friend ostream& operator<<(ostream& o,const S& x){ return o<

    类型转换运算符函数格式为

      operator 类型名()

    不写返回类型,返回类型跟“类型名”一致,只能是成员函数。

#include
#include
using namespace std;class Person{ string name; int age; float salary;public: Person(const char* n ,int a,float s):name(n),age(a),salary(s){}//排名不分先后 operator string(){
return name;} operator double(){
return salary;} operator int(){
return age;}};int main(){ Person a("芙蓉",18,80000); string info = a; // a.operator string() double money = a;// a.operator double() int age = a;//a.operator int() cout<
<<","<
<<","<
<

    圆括号作为运算符时,参数个数不定。函数定义格式:

      返回类型 operator()(参数表)

    支持圆括号运算符的对象也称为函数对象,因为使用的形式特别像调用函数。

#include
using namespace std;class A{ int* p; int len;public: A(int n,int v=0):p(new int[n]),len(n){ for(int i=0;i

 

转载于:https://www.cnblogs.com/visions/p/5463925.html

你可能感兴趣的文章
JAVA 8 特性
查看>>
算法设计 - LCS 最长公共子序列&&最长公共子串 &&LIS 最长递增子序列
查看>>
WebService之Axis2快速入门(7): Spring与axis整合发布为WebServic
查看>>
Uliweb查看模板调用关系
查看>>
C#与PHP通信压缩
查看>>
关于 Linux
查看>>
图文解析五大外链误区
查看>>
ios开发之导航控制器的原理
查看>>
《Netkiller Blockchain 手札》Hyperledger Fabric Java SDK Demo
查看>>
Linux系统_Centos7下安装Nginx
查看>>
《PHP和MySQL Web 开发》 第12章 MySQL高级管理
查看>>
数据库设计 Step by Step (6) —— 提取业务规则
查看>>
Redis客户端redisson实战
查看>>
连接到 JasperReports Server
查看>>
java处理高并发高负载类网站问题
查看>>
使用C#生成随机密码(纯数字或字母)和随机卡号(数字与字母组合)
查看>>
CAS服务器端集群
查看>>
JAVA Collections框架
查看>>
进制转换
查看>>
ASCII码
查看>>