最近c艸在學類與物件
擅長劃水的我并沒有聽課,害,所以東西有點云里霧里,
所以寫下這一篇博客來理解一下,
類的使用就像是封裝一類的東西,定義為一個類
定義的地方和結構體其實還是有點相似的,
這東西在演算法里面用的感覺不多,
以前也沒接觸過,
現在發現實際運用還是很有意思的,
首先是定義
class Clock{ public: void showtime(); void settime(int a,int b,int c); private: int hour,minute,second; protected: }; /* class 類的名稱{ public://外部介面 公有成員 private: 私有成員 protected: 保護型成員 }; */
public是外部介面,公有成員,就是所有部分都可以去呼叫的,就是整個程式的Clock形式的class類都可以呼叫;
而private是私有成員,只能允許內部的成員進行使用和調動,外部無法呼叫,
簡單來說就是,假如定義了Clock c;c.公有成員()是合法的,而c.私有成員()是無效的,
成員函式的實作
void Clock::showtime(){ cout<<hour<<":"<<minute<<":"<<second<<endl; } /* 回傳值 類名::函式成員名(引數表) { 函式體 }
*/
行內成員函式
有兩種宣告方式
- 隱式宣告方式
-
class Clock{ public: void showtime(); void settime(int a,int b,int c){ hour=a; minute=b; second=c; } private: int hour,minute,second; protected: };
settime函式就是隱式宣告
- 顯式宣告方式
-
class Clock{ public: void showtime(); void settime(int a,int b,int c); private: int hour,minute,second; protected: }; inline void Clock::settime(int a,int b,int c){//顯式 hour=a,minute=b,second=c; }
建構式
建構式是在類創建之初自己生成的,默認的
還是以clock為例子來說明一下
class Clock{ public: Clock(int a,int b,int c);//建構式 Clock(){//建構式 hour=0;minute=0;second=0; } void showtime(); void settime(int a,int b,int c); private: int hour,minute,second; }; Clock::Clock(int a,int b,int c){ hour=a,minute=b,second=c; } //其他成員函式略 int main(){ Clock c1(1,1,1);//呼叫了 有引數 的建構式 Clock c2; //呼叫了 無引數 的建構式 //其他略 }
ps:如果類里面沒有無引數建構式的那一句話,則 Clock c2是會報錯的;
復制建構式/拷貝建構式
class 類名{ public: 類名(形參表); //建構式 類名(類名 &物件名);//拷貝建構式 ...... }; 類名::類名(類名 &物件名){//拷貝建構式的實作 函式體 }
拷貝建構式有3種呼叫方式:
(暫時未梳理,先空出來)
解構式
解構式和建構式都是直接默認存在的
解構式的進行清理的,完成物件被洗掉前的清理作業;
class Clock{ ..... ~Clock();//解構式 };
- 解構式不接受任何引數
- 被洗掉前是會自動清理的,~clock解構式可以用在需要提前清理的時候 (感覺和return break類似)
以一個體型來盡量用到所用的以上知識
例4-3
一個圓形游泳池周圍需要建圓形過道
在圓形過道外圍圍上柵欄
柵欄價格為35元/米
過道的建造價格為20元/平方米
過道的寬度為3米
游泳池半徑由鍵盤輸入
/* 例4-3 一個圓形游泳池周圍需要建圓形過道 在圓形過道外圍圍上柵欄 柵欄價格為35元/米 過道的建造價格為20元/平方米 過道的寬度為3米 游泳池半徑由鍵盤輸入 */ #include<cstdio> #include<cstring> #include<iostream> #include<cmath> #include<algorithm> #include<queue> #include<utility> #include<stack> #include<cstdlib> #define ll long long #define inf 0x3fffffff #define pi 3.1415926535 #define concrete_price 20 #define fence_price 35 #define length 3 using namespace std; class price{ //類的定義 用來解決費用 private: //私有資料成員(僅供內部呼叫 double cir,area; public: //外部介面 or 公有成員 price(double c,double a){ //行內建構式隱式宣告 cir=c,area=a; } double buy_concrete(); double buy_fence(){ //行內成員函式隱式宣告 return area*concrete_price; } }; inline double price::buy_concrete(){ //行內成員函式顯式宣告 return cir*fence_price; } class circle{ //類的定義 用來解決面積和周長 private: double radius; double real_area(){ //私有成員函式 計算實際面積 double r=radius; double R=radius+3; double s1=pi*r*r; double s2=pi*R*R; return s2-s1; } public: circle(double r); //建構式 circle(){ //建構式 初始化私有成員的值 radius=0; } circle(circle &C); //拷貝建構式 or 復制建構式 double make_circumference(); double make_area(); ~circle(){}; //解構式 (后面跟著的 {} 不能少) 用于洗掉資料,做清理作業 }; circle::circle(double r){ //建構式的實作 radius=r; } circle::circle(circle &C){ //拷貝建構式的實作 radius=C.radius; } double circle::make_circumference(){ //成員函式的實作 return 2*pi*(radius+3); } double circle::make_area(){ //成員函式的實作 return real_area(); } int main(){ int r; cin>>r; circle Circle(r); //建構式初始化半徑的值 circle c1=Circle; //拷貝建構式的呼叫來初始化值 circle c2; //建構式直接初始化為0 double c_a=c1.make_area(); double c_c=c1.make_circumference(); cout<<c_c*fence_price<<endl<<c_a*concrete_price; price ans(c_c,c_a); //初始化建構式的值 cout<<"柵欄價格:"<<ans.buy_fence()<<endl; cout<<"過道價格:"<<ans.buy_concrete()<<endl; return 0; }
接下來需要學習類的組合
先預習吧,害
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/42996.html
標籤:C++
上一篇:STL之string
下一篇:STL之vector
