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

来源:互联网 发布:网络推广面试题及答案 编辑:程序博客网 时间:2024/06/05 20:25

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

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

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

以类Array为例:

Array.h

class Array{public://构造函数Array(int len);Array(const Array& arr);//析构函数~Array();//数据成员封装函数Array* setLen(int len);//返回指针thisint 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;//10arr1.printInfo().setLen(5)->printInfo();//两次输出的地址不同,并且调用了两次拷贝构造函数生成临时对象,由于没有接收的对象,语句结束后调用两次析构函数释放临时对象。cout << arr1.getLen() << endl;//仍为10arr1.printInfo1().setLen(5)->printInfo1();//因为返回的是引用,所以两次输出地址相同,均是arr1的地址,没有生成临时对象cout << arr1.getLen() << endl;//变成了5//cout << *this << endl;//报错,this只能用于非静态成员函数内部system("pause");return 0;}
运行结果(vs2012)

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