亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在C++中使用this指針和空指針

發布時間:2021-04-29 16:15:10 來源:億速云 閱讀:200 作者:Leah 欄目:開發技術

本篇文章為大家展示了怎么在C++中使用this指針和空指針,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

C++通過提供特殊的對象指針,this指針,解決上述問題。this指針指向被調用的成員函數所屬的對象

this指針是隱含每一個非靜態成員函數內的—種指針
this指針不需要定義,直接使用即可

this指針的用途:

  • 當形參和成員變量同名時,可用this指針來區分

  • 在類的非靜態成員函數中返回對象本身,可使用return this

怎么在C++中使用this指針和空指針

一、this指針

1 this指針解決名稱沖突

#include <iostream>
using namespace std;
class Person
{
public:
	Person(int age)
	{
		age = age;
	}
	int age;

};
//1 解決名稱沖突
void test1()
{
	Person p1(18);
	cout << "p1的年齡為=" << p1.age << endl;
}
int main() 
{
	test1();
	return 0;
}

輸出年齡亂碼

怎么在C++中使用this指針和空指針

分析

怎么在C++中使用this指針和空指針

光標放在形參age上,發現三個age 都是灰色,系統認為這個三個age 是同一數據

解決1:

將成員變量和形參書寫是上加m_區分

class Person
{
public:
	Person(int age)
	{
		m_Age = age;
	}
	int m_Age;

};

怎么在C++中使用this指針和空指針

解決2:

this指針指向 被調用的成員函數 所屬對象

class Person
{
public:
	//1 解決名稱沖突
	Person(int age)
	{
		//this指針指向 被調用的成員函數 所屬對象
		this->age = age;
	}
	int age;

};

怎么在C++中使用this指針和空指針

怎么在C++中使用this指針和空指針

怎么在C++中使用this指針和空指針

2 返回對象本身用*this

class Person
{
public:
	//1 解決名稱沖突
	Person(int age)
	{
		//this指針指向 被調用的成員函數 所屬對象
		this->age = age;
	}
	
	//2 返回對象本身用*this
	void PersonAddAge(Person &p)
	{
		this->age += p.age;
	}

	int age;

};
//1 解決名稱沖突
void test1()
{
	Person p1(18);
	cout << "p1的年齡為=" << p1.age << endl;

	//2 返回對象本身用*this
	Person p2(10);
	p2.PersonAddAge(p1);
	cout << "p2的年齡為=" << p2.age << endl;
}

怎么在C++中使用this指針和空指針

現在想要年齡后面繼續累加,出錯

怎么在C++中使用this指針和空指針

函數test1()是void無返回值型,調用完畢就不能再調用了

p2.PersonAddAge(p1).PersonAddAge(p1).PersonAddAge(p1);
如果每次調用完畢,可以返回到p2,就可以繼續再調用PersonAddAge(p1);

//2 返回對象本身用*this
Person &PersonAddAge(Person &p)
{
	//this指向p2的指針,而*this指向的就是p2這個對象的本體
	this->age += p.age;
	return *this;
}

完整代碼

#include <iostream>
#include<string>
using namespace std;

//1 解決名稱沖突

//2 返回對象本身用*this

class Person
{
public:
	//1 解決名稱沖突
	Person(int age)
	{
		//this指針指向 被調用的成員函數 所屬對象
		this->age = age;
	}
	
	//2 返回對象本身用*this
	Person &PersonAddAge(Person &p)
	{
		//this指向p2的指針,而*this指向的就是p2這個對象的本體
		this->age += p.age;
		return *this;
	}

	int age;

};
//1 解決名稱沖突
void test1()
{
	Person p1(18);
	cout << "p1的年齡為=" << p1.age << endl;

	//2 返回對象本身用*this
	Person p2(10);
	p2.PersonAddAge(p1).PersonAddAge(p1).PersonAddAge(p1);
	cout << "p2的年齡為=" << p2.age << endl;
}

int main() 
{
	test1();
	return 0;
}

怎么在C++中使用this指針和空指針

二、空指針調用成員函數

C++中空指針也是可以調用成員函數的,但是也要注意有沒有用到this指針

如果用到this指針,需要加以判斷保證代碼的健壯性

#include<iostream>
using namespace std;

//空指針調用成員函數

class Person
{
public:
	void showClassName()
	{
		cout << "This is Person class" << endl;
	}

	void showPersonAge()
	{
		//報錯原因是因為傳入的是空指針
		cout << "age=" <<m_Age<< endl;
	}
	int m_Age;
};

void test1()
{
	Person* p = NULL;
	p->showClassName();
//	p->showPersonAge();//報錯原因是因為傳入的是空指針
}

int main() 
{
	test1();
	return 0;
}

怎么在C++中使用this指針和空指針

//報錯原因是因為傳入的是空指針

if(this==NULL) return; //解決空指針出錯

void showPersonAge()
{
	//報錯原因是因為傳入的是空指針

	if(this==NULL)  return; //解決空指針出錯

	cout << "age=" <<m_Age<< endl;
}

完整代碼

#include<iostream>
using namespace std;

//空指針調用成員函數

class Person
{
public:
	void showClassName()
	{
		cout << "This is Person class" << endl;
	}

	void showPersonAge()
	{
		//報錯原因是因為傳入的是空指針

		if(this==NULL)  return; //解決空指針出錯

		cout << "age=" <<m_Age<< endl;
	}
	int m_Age;
};

void test1()
{
	Person* p = NULL;
	p->showClassName();
	p->showPersonAge();//報錯原因是因為傳入的是空指針
}

int main() 
{
	test1();
	return 0;
}

怎么在C++中使用this指針和空指針

三、const修飾成員函數

常函數:
·成員函數后加const后我們稱為這個函數為常函數
.常函數內不可以修改成員屬性
·成員屬性聲明時加關鍵字mutable后,在常函數中依然可以修改

常對象:
·聲明對象前加const稱該對象為常對象
·常對象只能調用常函數

怎么在C++中使用this指針和空指針

怎么在C++中使用this指針和空指針

解決方法:
成員屬性聲明時加關鍵字mutable,在常函數中才可以修改
mutable int m_B;//特殊變量,即使在常函數中,也可修飾這個值,加關鍵字mutable

//常函數
class Person
{
public:
	//this指針的本質是指針常量,指針的指向是不可以修改的
	//const Person *const this;
	//在成員函數后面加const,修飾的是this指向,讓指針指向的值也不可以修改
	void showPerson() const
	{
	//	m_A = 100; //常函數內不可以修改成員屬性
	//	this->m_A = 100;
	//	this = NULL;
		m_B = 100; //成員屬性聲明時加關鍵字mutable,在常函數中才可以修改
	}

	int m_A;
	mutable int m_B;//特殊變量,即使在常函數中,也可修飾這個值,加關鍵字mutable
};

const Person p;//在對象前加const變常對象

//常對象
void test2()
{
	const Person p;//在對象前加const變常對象
//	p.m_A = 100;//報錯
	p.m_B = 100;//m_B是特殊值,在常對象下也可以修改

	//常對象只能調用常函數
	p.showPerson();
//	p.func();//常對象不可以調用普通成員函數,因為普通成員函數可以修改屬性
}

完整代碼

#include<iostream>
using namespace std;

//常函數
//常對象

class Person
{
public:
	//this指針的本質是指針常量,指針的指向是不可以修改的
	//const Person *const this;
	//在成員函數后面加const,修飾的是this指向,讓指針指向的值也不可以修改
	void showPerson() const
	{
	//	m_A = 100; //常函數內不可以修改成員屬性
	//	this->m_A = 100;
	//	this = NULL;
		m_B = 100; //成員屬性聲明時加關鍵字mutable,在常函數中才可以修改
	}

	void func()
	{

	}

	int m_A;
	mutable int m_B;//特殊變量,即使在常函數中,也可修飾這個值,加關鍵字mutable
};
//常函數
void test1()
{
	Person p;
	p.showPerson();
}

//常對象
void test2()
{
	const Person p;//在對象前加const變常對象
//	p.m_A = 100;//報錯
	p.m_B = 100;//m_B是特殊值,在常對象下也可以修改

	//常對象只能調用常函數
	p.showPerson();
//	p.func();//常對象不可以調用普通成員函數,因為普通成員函數可以修改屬性
}
int main() 
{
	test1();
	return 0;
}

上述內容就是怎么在C++中使用this指針和空指針,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

辽宁省| 兴海县| 揭西县| 宜州市| 大石桥市| 泰安市| 河曲县| 邢台县| 卢湾区| 拜泉县| 龙南县| 巴彦县| 新竹市| 光山县| 泾阳县| 江门市| 延边| 原阳县| 华蓥市| 科尔| 古交市| 云浮市| 秦安县| 通榆县| 若羌县| 长岭县| 郁南县| 六枝特区| 佛学| 麟游县| 白水县| 大邑县| 会理县| 宁德市| 江都市| 巴楚县| 渝北区| 常熟市| 台北县| 长岭县| 宝兴县|