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