一、類的基本定義和使用
類是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-hk/n/331781.html
微信掃一掃
支付寶掃一掃