柚子快報(bào)邀請碼778899分享:C++ 類和對象
一 面向?qū)ο蠛兔嫦蜻^程
1.1?面向過程編程:
面向過程編程是一種基于步驟和過程的編程方法,就像按照菜譜做飯一樣。你需要一步一步地描述每個(gè)具體的操作。
例子:制作一杯咖啡
煮水。把咖啡粉放入濾紙。將熱水倒在咖啡粉上。等待咖啡滴入杯子。加入糖和牛奶(如果需要)。攪拌均勻??Х茸龊昧恕?/p>
在這個(gè)例子中,每一步都是一個(gè)獨(dú)立的過程,程序按照順序一步一步地執(zhí)行這些過程,最終完成目標(biāo)。
1.2 面向?qū)ο缶幊蹋?/p>
面向?qū)ο缶幊淌且环N基于對象和類的編程方法,就像在一個(gè)咖啡店中制作咖啡一樣。每一個(gè)對象都有自己的屬性和行為,你可以通過這些對象來完成任務(wù)。
例子:咖啡店制作一杯咖啡
定義“咖啡機(jī)”對象:它可以煮水、過濾咖啡、加熱牛奶等。定義“咖啡杯”對象:它可以裝咖啡、加入糖和牛奶、攪拌等。創(chuàng)建一個(gè)“咖啡師”對象:他知道如何操作咖啡機(jī)和咖啡杯來制作咖啡。
在這個(gè)例子中,“咖啡機(jī)”、“咖啡杯”和“咖啡師”都是對象,每個(gè)對象都有特定的屬性(如咖啡機(jī)的水溫、咖啡杯的容量)和方法(如煮水、攪拌)。通過這些對象的交互,最終完成制作咖啡的任務(wù)。
1.3 總結(jié)
面向過程編程(POP):專注于過程和步驟,類似于按照菜譜做飯,每一步都是具體的指令。
面向?qū)ο缶幊蹋∣OP):專注于對象和交互,類似于咖啡店中的角色分工,每個(gè)對象都有自己的職責(zé),通過對象之間的協(xié)作來完成任務(wù)。
二 類
2.1 類的引入:
C語言的結(jié)構(gòu)體和C++的類有些許相似但是它里面只能定義變量,在C++的類中不僅可以定義變量而且還可以定義函數(shù)在里面
C:
typedef struct Stack
{
STDataType* a;
int top;
int capacity;
}ST;
void Init(int month , int year)
{
……
}
就比如這個(gè)用C語言寫的棧,它里面就只能寫變量名,函數(shù)其他的只能寫在結(jié)構(gòu)體外面然后我們再看用C++看它怎么寫,看之前先得了解C++的定義
2.2 C++的定義:
class className// 類名
{
// 類體:由成員函數(shù)和成員變量組成
}; // 一定要注意后面的分號
C++:
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include
using namespace std;
class Date
{
void Init(int month, int date)
{
date = date;
//_date = date;
}
int date;
int month;
//int _date;
//int _month;
};
int main()
{
Date myDate;
myDate.Init(2, 3);
return 0;
}
C++就把它們封裝成一個(gè)類,但你們是不是發(fā)現(xiàn)了一個(gè)問題,我想給變量賦值時(shí)怎么參數(shù)名和變量名一模一樣,這是什么鬼?其實(shí)這是為了代碼的可讀性和一致性并且我們一般在變量前面加"_"
輸出:
那為什么編譯之后會顯示找不到Init呢?我不是在類里面寫了init嘛,原因就是class默認(rèn)為private,struct為了兼容C才是public
那什么是private?public呢?它就是我們接下來要講的類的訪問限定符及封裝
三 類的訪問限定符及封裝
3.1 類的訪問限定符:
C++實(shí)現(xiàn)封裝的方式:用類將對象的屬性與方法結(jié)合在一塊,讓對象更加完善,通過訪問權(quán)限選擇
性的將其接口提供給外部的用戶使用
?public:
當(dāng)你希望某個(gè)類、屬性或方法對所有其他代碼可見時(shí)使用
例子:
#include
using namespace std;
class Date
{
public:
void Init(int month, int date)
{
_date = date;
_month = month;
}
void sprint()
{
cout << _date << endl;
cout << _month << endl;
}
int _date;
int _month;
};
int main()
{
Date myDate;
myDate.Init(2, 3);
myDate.sprint();
return 0;
}
輸出:
private:
當(dāng)你希望某個(gè)屬性或方法只在類內(nèi)部使用,外部無法直接訪問時(shí)使用
例子:
using namespace std;
#include
class Date
{
public:
// 初始化日期和月份的方法
void Init(int month, int date)
{
_month = month;
_date = date;
}
// 打印日期的方法
void Print() const
{
std::cout << "Date: " << _month << "/" << _date << std::endl;
}
private:
int _date; // 日期
int _month; // 月份
};
int main()
{
Date myDate; // 創(chuàng)建 Date 類的實(shí)例
myDate.Init(2, 3); // 初始化日期和月份
myDate.Print(); // 打印日期
// 嘗試直接訪問私有成員變量(將導(dǎo)致編譯錯(cuò)誤)
cout << myDate._date << std::endl;
cout << myDate._month << std::endl;
return 0;
}
輸出:
錯(cuò)誤表示你不能直接訪問私有成員變量,如果想訪問那只能私有轉(zhuǎn)成公有
?protected:
當(dāng)你希望某個(gè)屬性或方法在同包內(nèi)或者子類中可見,但不希望它被外部類訪問時(shí)使用。
class Date
{
public:
// 初始化日期和月份的方法
void Init(int month, int date)
{
_month = month;
_date = date;
}
// 打印日期的方法
void Print() const
{
std::cout << "Date: " << _month << "/" << _date << std::endl;
}
protected:
int _date; // 日期
int _month; // 月份
};
int main()
{
Date myDate; // 創(chuàng)建 Date 類的實(shí)例
myDate.Init(2, 3); // 初始化日期和月份
myDate.Print(); // 打印日期
// 嘗試直接訪問私有成員變量(將導(dǎo)致編譯錯(cuò)誤)
cout << myDate._date << std::endl;
cout << myDate._month << std::endl;
return 0;
}
輸出:
訪問限定符說明:
1. public修飾的成員在類外可以直接被訪問
2. protected和private修飾的成員在類外不能直接被訪問(此處protected和private是類似的)
3. 訪問權(quán)限作用域從該訪問限定符出現(xiàn)的位置開始直到下一個(gè)訪問限定符出現(xiàn)時(shí)為止
4. 如果后面沒有訪問限定符,作用域就到 } 即類結(jié)束。
最后讓我們用一個(gè)形象的例子來結(jié)束這一個(gè)知識點(diǎn)
有一個(gè)家庭,父母有一個(gè)私人的保險(xiǎn)箱(private),這個(gè)保險(xiǎn)箱只有父母自己可以打開。父母還有一個(gè)家族的相冊(protected),家族的相冊不僅僅父母可以看,子女也可以看,但家外的朋友是不允許看的。而有一個(gè)花園(public),任何人都可以進(jìn)入和觀看。
3.2 封裝:
封裝(Encapsulation)是面向?qū)ο缶幊讨械囊粋€(gè)重要概念,它指的是將數(shù)據(jù)(成員變量)和操作數(shù)據(jù)的方法(成員函數(shù)或方法)封裝在一個(gè)單元內(nèi)部,并保護(hù)對象不受外部直接訪問。這種機(jī)制使得對象內(nèi)部的細(xì)節(jié)對外部是隱藏的,只能通過定義的公共接口(公共方法)來訪問和操作數(shù)據(jù),從而實(shí)現(xiàn)了數(shù)據(jù)的安全性和代碼的模塊化。
四 類的實(shí)例化:
4.1 實(shí)例化的概念:
在C++中,類是一個(gè)模板,它定義了一組屬性和行為。但是,類本身并不占用內(nèi)存空間。只有當(dāng)我們用類創(chuàng)建對象時(shí),才會分配內(nèi)存。這種創(chuàng)建對象的過程就叫做“實(shí)例化”。
class Date
{
public:
// 初始化日期和月份的方法
void Init(int month, int date)
{
_month = month;
_date = date;
}
// 打印日期的方法
void Print() const
{
std::cout << "Date: " << _month << "/" << _date << std::endl;
}
private:
int _date; // 日期
int _month; // 月份
};
int main()
{
Date myDate; // 類的實(shí)例化
return 0;
}
當(dāng)你寫一個(gè)類時(shí),只是定義了一個(gè)模板或藍(lán)圖,描述了對象的屬性和行為。這不會占用內(nèi)存空間。
所以說 _date 和?_month都只是聲明并不是定義,但想要它有內(nèi)存空間就需要實(shí)例化對象
這個(gè)代碼就是實(shí)例化 Date 類的一個(gè)對象:myDate 而_date 和 _month是對象名。
當(dāng)你實(shí)例化一個(gè)類時(shí),你實(shí)際上是在創(chuàng)建這個(gè)類的對象。每個(gè)對象都有自己的成員變量的副本,并且可以獨(dú)立操作這些變量
柚子快報(bào)邀請碼778899分享:C++ 類和對象
好文推薦
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。