this指针的用法 慕课网的 链接 http://www.imooc.com/video/8153
普通例子,不用this指针。
Array.h
class Array
{
public:
Array(int len);
~Array();
void setLen(int len);
int getLen();
void printInfo();
private:
int m_iLen;
};
Array.cpp
#include "Array.h"
#include <iostream>
using namespace std;
Array::Array(int len)
{
m_iLen = len;
}
Array::~Array()
{
}
void Array::setLen(int len)
{
m_iLen = len;
}
int Array::getLen()
{
return m_iLen;
}
void Array::printInfo()
{
cout << "len " << m_iLen << endl;
}
demo.cpp
#include <iostream>
#include <stdlib.h>
#include "Array.h"
using namespace std;
/************************************************************************/
/* 定义一个Array类
数据成员:m_iLen表示数组长度
成员函数:
构造函数
析构函数
len的封装函数
信息的输出函数printInfo
*/
/************************************************************************/
int main(void)
{
Array arr1(10);
system("pause");
return 0;
}
---------------------------------------------------------------------------------------------------------------------------
this 指针例子
Array.h
class Array
{
public:
Array(int len);
~Array();
void setLen(int len);
int getLen();
void printInfo();
private:
int len;
};
Array.cpp
#include "Array.h"
#include <iostream>
using namespace std;
Array::Array(int len)
{
this->len = len;
}
Array::~Array()
{
}
void Array::setLen(int len)
{
this->len = len;
}
int Array::getLen()
{
return this->len;
}
void Array::printInfo()
{
//cout << "len " << m_iLen << endl;
}
demo.cpp
#include <iostream>
#include <stdlib.h>
#include "Array.h"
using namespace std;
/************************************************************************/
/* 定义一个Array类
数据成员:m_iLen表示数组长度
成员函数:
构造函数
析构函数
len的封装函数
信息的输出函数printInfo
*/
/************************************************************************/
int main(void)
{
Array arr1(10);
cout << arr1.getLen() << endl;
system("pause");
return 0;
}
/************************************************************************/
// 10
// 请按任意键继续. . .
/************************************************************************/
**********************************this 指针 *****************************************
#include <iostream>
#include <stdlib.h>
#include "Array.h"
using namespace std;
/************************************************************************/
/* 定义一个Array类
数据成员:m_iLen表示数组长度
成员函数:
构造函数
析构函数
len的封装函数
信息的输出函数printInfo
*/
/************************************************************************/
int main(void)
{
Array arr1(10);
arr1.printInfo().setLen(5); //setLen(5) 并非改变arr1里面的len的值。
//返回出去Array Array::printInfo()的Array是一个临时对象。所以无法改变arr1的值。
//若想改变让Array是arr1对象的引用就可以达到该目的。
//在Array.cpp 里面修改为 Array& Array::printInfo()
//在Array.h 里面修改为 Array& printInfo();即可实现该目的。
cout << "len= " << arr1.getLen()<< endl;
system("pause");
return 0;
}
class Array
{
public:
Array(int len);
~Array();
void setLen(int len);
int getLen();
Array& printInfo();
private:
int len;
};
Array.cpp
#include "Array.h"
#include <iostream>
using namespace std;
Array::Array(int len)
{
this->len = len;
}
Array::~Array()
{
}
void Array::setLen(int len)
{
this->len = len;
}
int Array::getLen()
{
return this->len;
}
Array& Array::printInfo()
{
cout << "len= " << len << endl;
return *this;
//this 本身是个指向对象的指针,加*,则是个对象。返回类型为对象。
}
****************************************
****************************************************
#include <iostream>
#include <stdlib.h>
using namespace std;
class Coordinate
{
public:
Coordinate(int x, int y)
{
// 设置X,Y的坐标
m_iX = x;
m_iY = y;
}
// 实现常成员函数
void printInfo() const
{
cout << "("<< m_iX <<","<< m_iY <<")"<<endl;
}
public:
int m_iX;
int m_iY;
};
int main(void)
{
const Coordinate coor(3, 5);
// 创建常指针p
const Coordinate *p = &coor;
// 创建常引用c
const Coordinate &c = coor;
coor.printInfo();
p->printInfo();
c.printInfo();
system("pause");
return 0;
}
void printInfo() const
改为
void printInfo() 会出现如下error
1>h:\users\lin\documents\visual studio 2010\projects\mooc\mooc\demo.cpp(33): error C2662: “Coordinate::printInfo”: 不能将“this”指针从“const Coordinate”转换为“Coordinate &”
1> 转换丢失限定符
1>h:\users\lin\documents\visual studio 2010\projects\mooc\mooc\demo.cpp(34): error C2662: “Coordinate::printInfo”: 不能将“this”指针从“const Coordinate”转换为“Coordinate &”
1> 转换丢失限定符
1>h:\users\lin\documents\visual studio 2010\projects\mooc\mooc\demo.cpp(35): error C2662: “Coordinate::printInfo”: 不能将“this”指针从“const Coordinate”转换为“Coordinate &”
1> 转换丢失限定符
1>
1>生成失败。