c++初级 之 类的成员函数以及this指针使用

类的成员函数一般分以下几种:构造函数(包括拷贝构造函数)、析构函数、数据成员封装函数、一般功能函数。

成员函数的返回值一般有三种类型:变量、引用、指针,要体会它们的区别。

this指针指向的是当前对象,只能在类的非静态成员函数内部使用

以类Array为例:

Array.h

class Array
{
public:
	//构造函数
	Array(int len);
	Array(const Array& arr);
	//析构函数
	~Array();
	//数据成员封装函数
	Array* setLen(int len);//返回指针this
	int getLen();
	//输出数据功能函数//二者区别在于
	Array printInfo();//返回*this,并把*this的值赋给了一个临时的Array类的变量(该临时类会调用拷贝构造函数),该变量和*this是内容相同但其他(内存地址、实质上)完全不同的两个对象变量。当这个函数调用完,临时变量若没有被main中的对象接收的话就会被直接释放掉,会调用析构函数,所以会多输出个~Array
        Array& printInfo1();//返回*this,因为是赋值给一个临时的Array引用类型变量,所以只是给*this取了个别名,实质上都是一个对象变量。
	//返回的三种方式:变量、引用、指针,要深刻理解这几种方式的区别
private:
	int len;

};
Array.cpp

#include"Array.h"
#include<iostream>
#include<stdlib.h>
using namespace std;

//构造函数
Array::Array(int len)
{
	this->len = len;
	cout << "Array(int len)" << endl;
}

Array::Array(const Array& arr)
{
	cout << "Array(const Array& arr)" << endl;
}
	//析构函数
Array::~Array()
{
	cout << "~Array()" << endl;
}
	//数据成员封装函数
Array* Array::setLen(int len)
{
	this->len = len;
	return this;
}
int Array::getLen()
{
	return len;
}
	//输出数据功能函数
Array Array::printInfo()
{
	cout << "len = " << len <<endl;
	cout << this << endl;//输出对象地址
	return *this;
}
Array& Array::printInfo1()
{
	cout << "len = " << len <<endl;
	cout << this << endl;
	return *this;
}
demo.cpp

#include"Array.h"
#include<iostream>
#include<stdlib.h>
using namespace std;

int main()
{
	Array arr1(10);
	cout << arr1.getLen() << endl;//10
	arr1.printInfo().setLen(5)->printInfo();//两次输出的地址不同,并且调用了两次拷贝构造函数生成临时对象,由于没有接收的对象,语句结束后调用两次析构函数释放临时对象。
	cout << arr1.getLen() << endl;//仍为10
	arr1.printInfo1().setLen(5)->printInfo1();//因为返回的是引用,所以两次输出地址相同,均是arr1的地址,没有生成临时对象
	cout << arr1.getLen() << endl;//变成了5
	//cout << *this << endl;//报错,this只能用于非静态成员函数内部
	system("pause");
	return 0;

}
运行结果(vs2012)

(按任意键后,还会打印一行~Array(),调用析构函数释放arr1)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值