c++初级 之 类的成员函数以及this指针使用
2017-08-21 17:03
405 查看
类的成员函数一般分以下几种:构造函数(包括拷贝构造函数)、析构函数、数据成员封装函数、一般功能函数。
成员函数的返回值一般有三种类型:变量、引用、指针,要体会它们的区别。
this指针指向的是当前对象,只能在类的非静态成员函数内部使用
以类Array为例:
Array.h
![](https://img-blog.csdn.net/20170821173156983?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemVhbGljZQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
(按任意键后,还会打印一行~Array(),调用析构函数释放arr1)
成员函数的返回值一般有三种类型:变量、引用、指针,要体会它们的区别。
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 4000 << endl;//报错,this只能用于非静态成员函数内部 system("pause"); return 0; }运行结果(vs2012)
(按任意键后,还会打印一行~Array(),调用析构函数释放arr1)
相关文章推荐
- C++ 常成员函数和常对象以及this指针的重要理解
- C++ 二叉树的实现以及指针使用注意事项
- C++——类实例化内存的分配和this指针的使用
- C++ 面向对象编程 This指针的使用
- C++编程指向成员的指针以及this指针的基本使用指南
- C++中的this 指针的使用
- [C/C++标准库]_[初级]_[使用auto_ptr智能指针]
- C++中变量和基本类型,标准库类型以及数组和指针的使用规则
- C++中常对象与常成员函数以及this与成员函数的联系与区别
- C++——类实例化内存的分配和this指针的使用
- c++ 中 this指针的使用
- [转]C++中this指针理解汇总以及问题和解答
- C++中this指针的作用以及用法详解
- C++中this指针的使用
- C++中this指针的使用方法.
- C++初级主题--(1)this指针
- C++ 父类使用的this指针
- C++中this指针的使用
- C++中this指针的使用方法.
- C++ 7.7 类的成员函数、this 指针、默认构造函数、默认初始化(总结)