一、類的基本定義和使用
類是c++中一種自定義的數據類型,可以用來封裝數據和方法。類由成員變數和成員函數組成。以下是一個簡單的類定義:
class Person { public: string name; int age; void printInfo() { cout << "name:" << name << ", age:" << age << endl; } };
在上面的代碼中,我們定義了一個Person類,它有兩個成員變數(name和age)和一個成員函數(printInfo)。成員變數和成員函數可以使用public、protected、private關鍵字進行訪問控制。
使用該類也很簡單:
//創建對象 Person p; //給成員變數賦值 p.name = "Bob"; p.age = 20; //調用成員函數 p.printInfo();
輸出結果為:name:Bob, age:20。
二、構造函數和析構函數
構造函數和析構函數是類中非常重要的概念。構造函數用於對象的初始化,而析構函數用於對象的銷毀。
以下是一個簡單的構造函數和析構函數的定義:
class Person { public: string name; int age; //構造函數 Person(string n, int a) { name = n; age = a; cout << "Constructor is called!" << endl; } //析構函數 ~Person() { cout << "Destructor is called!" << endl; } void printInfo() { cout << "name:" << name << ", age:" << age << endl; } };
在上面的代碼中,我們定義了一個帶參數的構造函數和一個析構函數。我們創建對象時,將自動調用構造函數進行初始化,銷毀對象時將自動調用析構函數。
使用該類也很簡單:
//創建對象 Person p("Bob", 20); //調用成員函數 p.printInfo();
輸出結果為:Constructor is called!
name:Bob, age:20
Destructor is called!
三、訪問控制
c++中有三種訪問控制許可權:public、protected和private。public表示該成員可以被類的外部訪問,protected表示該成員可以被類的子類訪問,private表示該成員只能在類的內部訪問。
以下是一個具體的例子:
class Person { public: string name; //公有成員函數 void setName(string n) { //可以訪問私有成員變數 this->name = n; //可以訪問私有成員函數 this->setAge(20); } protected: int age; //受保護的成員函數 void setAge(int a) { //只能在類內部訪問私有成員變數 this->age = a; } private: string gender; };
在上面的代碼中,我們定義了一個Person類,它有一個public成員函數(setName)、一個protected成員變數(age)和一個private成員變數(gender)。在public成員函數中,我們可以訪問私有成員變數和私有成員函數,而在類的外部同樣可以訪問該函數。
四、繼承和多態
繼承是面向對象程序設計中的一個重要概念。它可以幫助我們實現代碼的復用。子類可以繼承父類的成員變數和成員函數,並且還可以擴展自己的新的成員變數和成員函數。
以下是一個簡單的繼承的例子:
class Student : public Person { public: int studentId; //子類的構造函數 Student(string n, int a, int id) : Person(n, a) { studentId = id; } //子類的成員函數 void printStudentInfo() { cout << "name:" << name << ", age:" << age << ", studentId:" << studentId << endl; } };
在上面的代碼中,我們定義了一個Student類,它繼承了Person類的成員變數和成員函數,同時還有自己的成員變數(studentId)和成員函數(printStudentInfo)。
使用該類也很簡單:
//創建對象 Student s("Amy", 18, 20210001); //調用成員函數 s.printStudentInfo();
輸出結果為:name:Amy, age:18, studentId:20210001。
多態是面向對象程序設計中的另一個重要概念。它允許我們按照統一的介面而非具體的實現來調用對象。c++中實現多態有兩種方式:虛函數和純虛函數。
以下是一個簡單的虛函數的例子:
class Shape { public: //虛函數 virtual double getArea() { return 0; } }; class Triangle : public Shape { public: int base; int height; Triangle(int b, int h) { base = b; height = h; } //重寫虛函數 double getArea() { return 0.5*base*height; } }; class Square : public Shape { public: int side; Square(int s) { side = s; } //重寫虛函數 double getArea() { return side*side; } };
在上面的代碼中,我們定義了一個抽象類Shape,它有一個虛函數(getArea)。我們繼承Shape,實現了具體的圖形類Triangle和Square。這些具體的類重寫了抽象類Shape中的虛函數。
使用該類也很簡單:
//創建對象 Shape *s1 = new Triangle(10, 5); Shape *s2 = new Square(8); //調用虛函數 cout << "Triangle area is: " <getArea() << endl; cout << "Square area is: " <getArea() << endl;
輸出結果為:Triangle area is: 25,Square area is: 64。
五、模板類
c++中的模板類可以幫助我們快速實現通用類。模板類是一種特殊的類,它可以使用一個或多個類型作為參數。
以下是一個簡單的模板類的定義:
template class Stack { private: T *data; int topIndex; int size; public: //構造函數 Stack(int s) { data = new T[s]; topIndex = -1; size = s; } //析構函數 ~Stack() { delete[] data; } //壓棧函數 void push(T d) { if (topIndex = 0) { return data[topIndex--]; } return NULL; } };
在上面的代碼中,我們定義了一個模板類Stack,它有一個類型參數T。該類有兩個成員變數(data和topIndex)和兩個成員函數(push和pop)。成員函數可以使用T類型作為參數和返回值。
使用該類也很簡單:
//創建Stack對象 Stack s(100); //壓棧 s.push(10); s.push(20); //彈棧 cout << s.pop() << endl; cout << s.pop() << endl;
輸出結果為:20,10。
原創文章,作者:HQGXJ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/331781.html