c++类成员函数定义方法与运算符重载(2)

本文深入探讨了C++中对象初始化的各种方式,包括通过构造函数、已有对象和函数返回值进行初始化。同时,详细解析了运算符重载的概念及实现,如加法和减法运算符的重载,并解释了this指针的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个例子虽代码繁杂,但却蕴含很多东西

1.里面蕴含构造函数的调用时机
  • 1.已有的对象初始化一个新定义的对象
  • 2.当对象作为函数的实参传递给函数的形参时(例子中有体现)
  • 3.当函数的返回值是类的对象,函数执行返回时
Complex Complex::sub(Complex c)
{
	return Complex(real-c.real,image-c.image);
}

return返回的是一个无名函数,但是在return结束后是调用了一个拷贝构造函数,这与局部变量在函数结束时释放一点也不矛盾,这里指的是3

2.给对象赋值的两种方式

Complex a(1.8,-2.4),b(4.3,4.7);
Complex c=a.add(b); //给对象赋初值的又一方式

3.this指针
Complex Complex::operator+(Complex c) 
{	//this 指针 
	Complex z(real+c.real,image+c.image);
	return(z);//此时间点,系统自动调用复制构造函数 
}

这里其实可以改写为
Complex z(this->real+c.real,this->image+c.image);
谁调用它this指针便指向谁

4.运算符重载
//加法 运算符重载函数
Complex Complex::operator+(Complex c) 
{	//this 指针 
	Complex z(real+c.real,image+c.image);
	return(z);//此时间点,系统自动调用复制构造函数 
}

代码如下

#include<iostream>
using namespace std;
class Complex
{
private:
	double real,image;
public:
	Complex(double px=0,double py=0)
	{
		real=px;
		image=py;
	}
	Complex add(Complex c);
	Complex sub(Complex c);
	//operator+是函数名,实现 加法 运算符重载
	Complex operator+(Complex c); 
	Complex operator-(Complex n); 
	void print();
}; 
Complex Complex::add(Complex c)
{
	//return Complex(real+c.real,image+c.image);
	//改写成易懂形式 
	Complex z(real+c.real,image+c.image);
	return(z);//此时间点,系统自动调用复制构造函数 
}
Complex Complex::sub(Complex c)
{
	return Complex(real-c.real,image-c.image);
}
void Complex::print()
{
	if(image<0.0)
		cout<<"("<<real<<image<<"i"<<")"<<endl;
	else 
		cout<<"("<<real<<"+"<<image<<"i"<<")"<<endl;	
}
//加法 运算符重载函数
Complex Complex::operator+(Complex c) 
{	//this 指针 
	Complex z(real+c.real,image+c.image);
	return(z);//此时间点,系统自动调用复制构造函数 
}
Complex Complex::operator-(Complex n) 
{	//this 指针 
	Complex m(this->real-n.real,this->image-n.image);
	return(m);//此时间点,系统自动调用复制构造函数 
}
int main(void)  
{
	 Complex a(1.8,-2.4),b(4.3,4.7);
	 Complex c=a.add(b);  //给对象赋初值的又一方式 
	 Complex d=a.sub(b);
	 c.print();
	 d.print();
	 //e=a+b
	 Complex e;
	 e=a+b; //加法运算符重载,编译器自动转化成
	 //e=a.operator+(b) 
	 //e.operator=(z的中间块)系统默认写 
	 cout<<"++++++加法 运算符重载结果"<<endl;
	 e.print(); 
	 cout<<"------------- 减法运算符重载函数"<<endl; 
	 Complex f;
	 f=a-b; 
	f.print();	

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值