VS2010 C++ 学习笔记(六) this指针 const 指针 引用

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;
}


Array.h

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>生成失败。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值