天天看點

C/C++程式設計筆記:關于C++類和對象,這些知識點你知道嗎?

類: C ++中的類是建構塊,可導緻面向對象的程式設計。它是使用者定義的資料類型,它擁有自己的資料成員和成員函數,可以通過建立該類的執行個體來通路和使用它們。

C ++類就像對象的藍圖。

例如:考慮汽車類别。可能有許多名稱和品牌不同的汽車,但它們都會共享一些共同的屬性,例如所有汽車都有4個車輪,速度限制,裡程範圍等。是以,這裡的汽車是類别和車輪,速度限制,裡程是他們的屬性。

類是使用者定義的資料類型,具有資料成員和成員函數。

資料成員是資料變量,成員函數是用于操縱這些變量的函數,這些資料成員和成員函數共同定義了類中對象的屬性和行為。

在上面的Car類示例中,資料成員将是速度限制,裡程等,并且成員功能可以應用制動,增加速度等。

一個對象是一個類的執行個體。當定義了一個類時,不配置設定記憶體,而是在執行個體化(即建立對象)時配置設定記憶體。

定義類和聲明對象

在C ++中,使用關鍵字class及其後的類的名稱定義了一個類。類的主體在大括号内定義,并在末尾以分号結束。

C/C++程式設計筆記:關于C++類和對象,這些知識點你知道嗎?

聲明對象:定義類時,僅定義該對象的規範;否則,将不執行任何操作。沒有配置設定記憶體或存儲空間。要使用該類中定義的資料和通路功能,您需要建立對象。

句法:

ClassName ObjectName;

通路資料成員和成員函數:可以使用dot('。')運算符與對象一起通路類的資料成員和成員函數。例如,如果對象的名稱是obj,并且您想使用名稱printName()通路成員函數,則必須編寫obj.printName()。

通路資料成員

公共資料成員的通路方式也與給定的方式相同,但是對象不允許直接通路私有資料成員。通路資料成員僅取決于該資料成員的通路控制。

此通路控制由C ++中的Access修飾符提供。有三種通路修飾符:public,private和protected。

// C++ program to demonstrate
// accessing of data members

#include <bits/stdc++.h>
using namespace std;
class Geeks
{
	// Access specifier
	public:

	// Data Members
	string geekname;

	// Member Functions()
	void printname()
	{
	cout << "Geekname is: " << geekname;
	}
};

int main() {

	// Declare an object of class geeks
	Geeks obj1;

	// accessing data member
	obj1.geekname = "Abhi";

	// accessing member function
	obj1.printname();
	return 0;
}
           

輸出:

Geekname is:Abhi

類中的成員函數

有兩種定義成員函數的方法:

(1)内部類定義

(2)課外定義

要在類定義之外定義成員函數,我們必須使用範圍解析:::以及類名和函數名。

// C++ program to demonstrate function
// declaration outside class

#include <bits/stdc++.h>
using namespace std;
class Geeks
{
	public:
	string geekname;
	int id;
	
	// printname is not defined inside class definition
	void printname();
	
	// printid is defined inside class definition
	void printid()
	{
		cout << "Geek id is: " << id;
	}
};

// Definition of printname using scope resolution operator ::
void Geeks::printname()
{
	cout << "Geekname is: " << geekname;
}
int main() {
	
	Geeks obj1;
	obj1.geekname = "xyz";
	obj1.id=15;
	
	// call printname()
	obj1.printname();
	cout << endl;
	
	// call printid()
	obj1.printid();
	return 0;
}
           

輸出:

Geekname is:xyz

Geek id is::15

請注意,預設情況下,在類定義中定義的所有成員函數都是inline,但是您也可以通過将關鍵字inline與其内聯來使任何非類函數内聯。内聯函數是實際函數,在編譯過程中會像預處理器宏一樣複制到各處,是以可以減少函數調用的開銷。

構造函數

構造函數是特殊的類成員,每次執行個體化該類的對象時,編譯器都會調用它們。構造函數與類具有相同的名稱,并且可以在類定義的内部或外部定義。

共有3種類型的構造函數:

(1)預設構造函數

(2)參數化的構造函數

(3)複制構造函數

// C++ program to demonstrate constructors

#include <bits/stdc++.h>
using namespace std;
class Geeks
{
	public:
	int id;
	
	//Default Constructor
	Geeks()
	{
		cout << "Default Constructor called" << endl;
		id=-1;
	}
	
	//Parametrized Constructor
	Geeks(int x)
	{
		cout << "Parametrized Constructor called" << endl;
		id=x;
	}
};
int main() {
	
	// obj1 will call Default Constructor
	Geeks obj1;
	cout << "Geek id is: " <<obj1.id << endl;
	
	// obj1 will call Parametrized Constructor
	Geeks obj2(21);
	cout << "Geek id is: " <<obj2.id << endl;
	return 0;
}
           

一個拷貝構造函數建立一個新的對象,這是現有對象的精确副本。編譯器為所有類提供預設的Copy構造函數。

句法:

類名(類名&){}

析構函數

析構函數是對象的作用域結束時由編譯器調用的另一個特殊成員函數。

// C++ program to explain destructors

#include <bits/stdc++.h>
using namespace std;
class Geeks
{
	public:
	int id;
	
	//Definition for Destructor
	~Geeks()
	{
		cout << "Destructor called for id: " << id <<endl;
	}
};

int main()
{
	Geeks obj1;
	obj1.id=7;
	int i = 0;
	while ( i < 5 )
	{
		Geeks obj2;
		obj2.id=i;
		i++;		
	} // Scope for obj2 ends here

	return 0;
} // Scope for obj1 ends here
           

每天學點小知識,希望對你有幫助~

另外如果你想更好的提升你的程式設計能力,學好C語言C++程式設計!彎道超車,快人一步!筆者這裡或許可以幫到你~

C語言C++程式設計學習交流圈子,QQ群:765803539【點選進入】微信公衆号:C語言程式設計學習基地

分享(源碼、項目實戰視訊、項目筆記,基礎入門教程)

歡迎轉行和學習程式設計的夥伴,利用更多的資料學習成長比自己琢磨更快哦!

程式設計學習視訊分享:

C/C++程式設計筆記:關于C++類和對象,這些知識點你知道嗎?

繼續閱讀