NDK13_C++基础: 重载函数、操作符重载

NDK开发汇总

重载函数

C++ 允许在同一作用域中的某个函数运算符指定多个定义,分为函数重载运算符重载

函数重载

void print(int i) {
	cout << "整数为: " << i << endl;
}
 
void print(double  f) {
	cout << "浮点数为: " << f << endl;
}

操作符重载

C++允许重定义或重载大部分 C++ 内置的运算符

函数名是由关键字 operator 和其后要重载的运算符符号构成的

重载运算符可被定义为普通的非成员函数或者被定义为类成员函数

成员函数

class Test1 {
public:
    Test1(){}
	//定义成员函数进行重载
    //返回对象   调用拷贝构造函数  释放函数内 t 对象
    //引用类型(Test1&) 没有复制对象 返回的是 t 对象本身 t会被释放 所以会出现问题(数据释放不彻底就不一定)
    // 可以输出 t 与 t3 地址查看
	Test1 operator+(const Test1& t1) {
		Test1 t;
		t.i = this->i + t1.i;
		return t;
	}
    //拷贝构造函数 (有默认的) 
    Test1(const Test1& t){
        //浅拷贝
		this->i = t.i;
		cout << "拷贝" << endl;
        //如果动态申请内存 需要深拷贝
	};
	int i;
};

Test1 t1;
Test1 t2;
t1.i = 100;
t2.i = 200;
//发生两次拷贝
// C++真正的临时对象是不可见的匿名对象
//1、拷贝构造一个无名的临时对象,并返回这个临时对象
//2、由临时对象拷贝构造对象 t3
//语句结束析构临时对象
Test1 t3 = t1 + t2;
cout << t3.i << endl;

Xcode上玩,使用的g++编译器会进行 返回值优化(RVO、NRVO) 从而看不到拷贝构造函数的调用。

可以加入 “-fno-elide-constructors” 取消GNU g++优化

对windows vs编译器cl.exe无效,VS Debug执行RVO,Release执行NRVO

RVO(Return Value Optimization):消除函数返回时创建的临时对象

NRVO(Named Return Value Optimization):属于 RVO 的一种技术, 直接将要初始化的对象替代掉返回的局部对象进行操作。

在这里插入图片描述

非成员函数

class Test2 {
public:
	int i;
};
//定义非成员函数进行 + 重载
Test2 operator+(const Test2& t21, const Test2& t22) {
	Test2 t;
	t.i = t21.i + t22.i;
	return t;
}

Test2 t21;
Test2 t22;
t21.i = 100;
t22.i = 200;
Test2 t23 = t21 + t22;
cout << t23.i << endl;

允许重载的运算符

类型运算符
关系运算符==(等于),!= (不等于),< (小于),> (大于>,<=(小于等于),>=(大于等于)
逻辑运算符||(逻辑或),&&(逻辑与),!(逻辑非)
单目运算符+ (正),-(负),*(指针),&(取地址)
自增自减运算符++(自增),–(自减)
位运算符| (按位或),& (按位与),~(按位取反),^(按位异或),,<< (左移),>>(右移)
赋值运算符=, +=, -=, *=, /= , % = , &=, |=, ^=, <<=, >>=
空间申请与释放new, delete, new[ ] , delete[]
其他运算符()(函数调用),->(成员访问),,(逗号),
void *operator new (size_t size)
{
	cout << "新的new:" << size << endl;
	return malloc(size);
}

void operator delete(void *p)
{
	//释放由p指向的存储空间
	cout << "新的delete" << endl;
	free(p);
}
... ...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值