目錄
1、抽象
2、UML類圖
3、類定義
4、類成員函數(shù)
(1)構(gòu)造函數(shù)(constructor)
(2)析構(gòu)函數(shù)(destructor)
5、對象實現(xiàn)
6、封裝
7、getter、setter方法
為什么要從面向過程轉(zhuǎn)到面向?qū)ο螅?/p>
隨著計算機發(fā)展,問題場景越來越復雜,我們很難再描述每一個可能的過程
轉(zhuǎn)而描述每一個實體(屬性+行為),這就是面向?qū)ο蟮暮诵乃枷?/p>
1、抽象
識別出各個實體及其屬性和行為,類就是對某一事物的抽象
下面以游戲為例來說明
屬性:ID,段位,英雄,戰(zhàn)力,場次...
行為:移動,放技能,普攻,回城,吃血包...
屬性:名稱,傷害,效果,價格,數(shù)量...
行為:購買,出售,合成...
OK,至此我們清楚了什么是抽象,以及區(qū)分類的屬性和行為。
2、UML類圖
用來規(guī)范描述一個事物的屬性和行為
以上面的 “泣血之刃” 為例
?
數(shù)據(jù)成員屬性后需要加上數(shù)據(jù)類型
屬性、行為前的 + 和 -
+表示為public //公有成員
-表示為private //私有成員
3、類定義
定義一個類的成員變量和成員函數(shù)(語句同樣以 ; 結(jié)尾)
類通過實例化成為真實存在的對象(存在于內(nèi)存中)
我們使用關鍵字class來進行類定義
4、類成員函數(shù)
(1)構(gòu)造函數(shù)(constructor)
對象實例化時,在分配的空間上構(gòu)造對象,目的就是初始化對象
① 創(chuàng)建對象時自動調(diào)用
② 有默認的構(gòu)造函數(shù),并不是必須定義
③ 默認構(gòu)造函數(shù)是無參的,也可以定義有參的
④ 可以有多個重載
⑤ 不可以有返回值
(2)析構(gòu)函數(shù)(destructor)
對象生命期結(jié)束時,回收空間前,完成對象清理工作
① 一定無參數(shù)
② 不可以有返回值
③ 函數(shù)前有~(算是一個標志)
此外,構(gòu)造函數(shù)和析構(gòu)函數(shù)的函數(shù)名都必須和類名相同
5、對象實現(xiàn)
#include <iostream>
using namespace std;
class Circle {
public:
float radius; //這里的radius是類的數(shù)據(jù)成員
Circle(float radius) //有參構(gòu)造,括號里的radius為形式參數(shù)
{
this->radius = radius; //this指針在類定義內(nèi)部使用,指向當前對象
}
float getS() {
return 3.14 * radius* radius;
}
};
int main()
{
Circle Circle1(1.2); //實例化對象,一個圓的半徑為1.2
cout << Circle1.getS(); //訪問對象成員,調(diào)用求面積的函數(shù)并輸出結(jié)果
}
?
?
6、封裝
將類的一些成員變量或方法藏起來,不允許外界直接操作(控制類成員在外部的可見性)
訪問控制屬性:
public:外部可通過 對象.名字 訪問
protected
private:外部不可直接通過 對象.名字 訪問
7、getter、setter方法
為某些私有成員提供外部讀寫方法,一般都是public
getter函數(shù)格式:
類型 get_XXX() const{
return XXX;
}
(通常設置為const函數(shù),無參且有返回值)
setter函數(shù)格式:
void set_XXX(){
this->XXX=XXX;
}
(通常接受const參數(shù),有參且無返回值)
來看例子,代碼有點長,各位好好理解
#include <iostream>
using namespace std;
class Book {
private:
string name;
int count;
public:
Book(string name) {
count = 0;
this->name = name;
}
int get_count() const {
return count;
}
string get_name() const {
return name;
}
void set_count(int count) {
if (count < 0) {
count = 0;
}
this->count = count;
}
void set_name(const string& name) {
this->name = name;
}
void add_count() {
count++;
}
};
int main() {
Book book1("高等數(shù)學");
cout << book1.get_name() << "庫存: " << book1.get_count() << endl;
book1.add_count();
cout << book1.get_name() << "庫存: " << book1.get_count() << endl;
}
8、this指針
在類成員函數(shù)定義內(nèi)部使用,指向當前對象
利用this指針編寫Student的有參構(gòu)造函數(shù),避免變量名覆蓋問題:
Student(int id,string name,int age,float score){
this->id = id; //由于形參名把數(shù)據(jù)成員名覆蓋掉了,所以用this指針表明當前對象的數(shù)據(jù)成員
this->name = name;
this->age = age;
this->score = score;
}
也可使用其他方式避免同名覆蓋,如下?
Student(int _id, string _name, int_age, float _score){
id = _id;
name =_name;
age = _age;
score = score;
}
?這樣就可以不用this指針文章來源:http://www.zghlxwxcb.cn/news/detail-435742.html
OK,今天內(nèi)容到此為止,你學廢了嗎?文章來源地址http://www.zghlxwxcb.cn/news/detail-435742.html
到了這里,關于從面向過程到面向?qū)ο蟮奈恼戮徒榻B完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!