日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

C++:随笔4--对象

發(fā)布時(shí)間:2023/11/27 生活经验 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++:随笔4--对象 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

類是一個(gè)模型,當(dāng)我們?yōu)檫@個(gè)類創(chuàng)建實(shí)例的時(shí)候也就是對(duì)象的本身。

對(duì)象的內(nèi)部可以有變量和函數(shù),而結(jié)構(gòu)通常只是由各種變量構(gòu)成。對(duì)象與結(jié)構(gòu)有很多相似之處,但是對(duì)象還可以有他們自己的函數(shù)。

類由變量和函數(shù)組成,對(duì)象將使用哪些變量來存儲(chǔ)信息,調(diào)用哪些函數(shù)來完成操作,所以習(xí)慣上類里邊變量成為屬性,函數(shù)成為方法。

OOP(面向?qū)ο缶幊踢^程):

第一步:創(chuàng)建一個(gè)類(每個(gè)類跟變量一樣都有一個(gè)名字,類名的第一個(gè)字母通常采用大寫)

“::”作用域解析符作用是告訴編譯器這個(gè)方法存在于何處,或者說是屬于哪一個(gè)類。

std::cout所引用的是std定義的cout,而std::string數(shù)據(jù)類型其實(shí)也是一個(gè)對(duì)象。

class Car
{public ://(public這個(gè)關(guān)鍵詞實(shí)際上就是作用域的問題)std::string color;std string eigine;float gas_tank;unsigned int Wheel;
//方法的聲明(寫在類里面)void fill_Tank(float liter);//只有一個(gè)參數(shù),不需要返回值void running(void);//不需要返回類型,不需要參數(shù)
//方法的定義通常安排在類聲明的后面
};//可以直接在這個(gè)后邊定義類的對(duì)象Car(但是一般呢不這樣用,將聲明和定義是分開的)。
//方法的定義通常安排在類聲明的后面
void Car::fill_Tank(float liter)//::是作用域解析符(是在說fill_Tank這個(gè)函數(shù)是在Car這個(gè)類里邊的)
{gas_tank += liter;
}
int main()
{Car mycar;//使用Car這個(gè)類定義一個(gè)變量mycar(在創(chuàng)建類的對(duì)象時(shí),也可以像結(jié)構(gòu)那樣直接在大括號(hào)后邊進(jìn)行定義),一個(gè)具體實(shí)例。擁有方法和屬性mycar.gas_tank=85;return 0;
}

PS:我們可以把類的聲明和類的函數(shù)的定義分別存入兩個(gè)不同的文件,聲明存入.h頭文件,定義存入相應(yīng)的.cpp文件。

C++允許在類里面聲明常量,但是不允許對(duì)它進(jìn)行賦值。

把一個(gè)對(duì)象賦值給另一個(gè)同類的對(duì)象將會(huì)自動(dòng)使同名的的屬性有同樣的值。

class Car
{public:const float TANKSIZE=85;//這樣會(huì)出錯(cuò)。
}
//繞開這一限制的方法就是創(chuàng)建一個(gè)靜態(tài)常量
class Car
{public:static const float TANKSIZE=85;//這樣會(huì)出錯(cuò)。
};
Car car1,car2;
car2=car1;//把一個(gè)對(duì)象賦值給另一個(gè)同類的對(duì)象將會(huì)自動(dòng)使同名的的屬性有同樣的值。

總結(jié):開發(fā)程序最基本的步驟:

(1)定義一個(gè)有屬性(變量)和方法(函數(shù))的類。(模板)

(2)為該類創(chuàng)建一個(gè)變量。(實(shí)現(xiàn))

-------------------------擴(kuò)展

構(gòu)造器:

1、構(gòu)造器和通常方法的主要區(qū)別:

  • 構(gòu)造器的名字必須和他所在的類的名字一樣。
  • 系統(tǒng)在創(chuàng)建某個(gè)類的實(shí)例時(shí),會(huì)第一時(shí)間自動(dòng)調(diào)用這個(gè)類的構(gòu)造器。
  • 構(gòu)造器永遠(yuǎn)不會(huì)返回任何值。

2、創(chuàng)建構(gòu)造器需要先把他的聲明添加到類里:

class Car
{Car(void);
}

3、注意大小寫和類名保持一致,在結(jié)束聲明之后開始定義構(gòu)造器本身:

Car::Car(void)//因?yàn)闃?gòu)造器默認(rèn)不會(huì)有任何返回值,所以我們不用寫為 void Car::Car(void)
{color="white";engine="V8";wheel=4;gas_tank=FULL_GAS;
}

4、構(gòu)造器的作用就是對(duì)它進(jìn)行初始化

class Car
{std::string color;std::string enigen;unsigned int gas_tank;unsigned int wheel;Car(void);void set color(std string col);void set enigen(std string eng);void set wheel(unsigned int whe);void fill tank(int liter);int running(void);void warning(void);
}
Car::Car(void)
{color="white";}

5、構(gòu)造對(duì)象數(shù)組

數(shù)組可以是任何一種數(shù)據(jù)類型,當(dāng)然也包含對(duì)象。

Car mycar[10];//Car是類名,后邊是一個(gè)數(shù)組
//調(diào)用的語(yǔ)法:
Mycar[x].running;//x表示給定數(shù)組元素的下標(biāo)

6、注意每個(gè)類至少有一個(gè)構(gòu)造器,如果你沒有在類里定義一個(gè)構(gòu)造器,編譯器就會(huì)使用以下語(yǔ)法替你定義一個(gè):

ClassName::ClassName(){}

析構(gòu)器:

在創(chuàng)建對(duì)象時(shí)系統(tǒng)會(huì)自動(dòng)調(diào)用一種特殊的方法,即構(gòu)造器。

在銷毀一個(gè)對(duì)象時(shí)系統(tǒng)也應(yīng)該會(huì)調(diào)用另一個(gè)特殊方法達(dá)到對(duì)應(yīng)效果,即析構(gòu)器。(一般來說構(gòu)造器用來完成事先的初始化和準(zhǔn)備工作(申請(qǐng)內(nèi)存),析構(gòu)器用來完成時(shí)候所必須的清理工作(清理內(nèi)存))

1、析構(gòu)器有著和構(gòu)造器/類一樣的名字,只不過前邊多了一個(gè)波浪符“~”前綴。析構(gòu)器也永遠(yuǎn)不返回任何值。析構(gòu)器是不帶參數(shù)的,所以析構(gòu)器的聲明格式永遠(yuǎn)是~ClassName();

class Car(void)
{Car();~Car();
}
//析構(gòu)器是不帶參數(shù)的,所以析構(gòu)器的聲明格式永遠(yuǎn)是
~ClassName();

在我們剛剛上邊的例子中,析構(gòu)器是可有可無的,(因?yàn)槲覀儎倓偟睦硬]有涉及到內(nèi)存的申請(qǐng)啊以及動(dòng)態(tài)內(nèi)存的申請(qǐng),只不過是申請(qǐng)了幾個(gè)變量,而變量在這個(gè)函數(shù),對(duì)象結(jié)束的時(shí)候由棧的機(jī)制它會(huì)自動(dòng)返回,不用我們來處理;如果我們用這個(gè)new申請(qǐng)的一些動(dòng)態(tài)內(nèi)存的話,就必須在析構(gòu)器里邊對(duì)它進(jìn)行釋放;或者說我們打開一個(gè)文件也是對(duì)他進(jìn)行申請(qǐng)內(nèi)存,比如openfile后面就必須有closefile與之對(duì)應(yīng),那我們就必須分別寫在構(gòu)造器和析構(gòu)器里面),但是在比較復(fù)雜的類里,析構(gòu)器往往非常重要。(可能會(huì)引起內(nèi)存泄漏。也就是你申請(qǐng)了一塊內(nèi)存沒有去用它,或者說你調(diào)用完這塊內(nèi)存之后,你這個(gè)類消除了,但是你這塊內(nèi)存沒有釋放,那么他就會(huì)在內(nèi)存空間中存下,保留這個(gè)地址,當(dāng)你不小心訪問到這個(gè)地址的時(shí)候,就會(huì)出現(xiàn)該內(nèi)存不能讀,就會(huì)彈出錯(cuò)誤對(duì)話框);例如某個(gè)類的構(gòu)造器申請(qǐng)了一塊內(nèi)存,我們就必須在析構(gòu)器里釋放這塊內(nèi)存。

#include<iostream>
#include<string>
#include<fetream>
class StoreQuote
{publis:std::string quote,sperker;std::ofstream fileOutput;StoreQuote();//構(gòu)造器~StoreQuote();//析構(gòu)器void inputQuote();void inputSpeaker();bool write();
};//類的聲明
StoreQuote::StoreQuote()
{fileoutput.open("test.txt",std::ios::app);//類.方法()打開一個(gè)文件,app表示追加的形式打開
}
StoreQuote::~StoreQuote()
{fileOutput.close();//析構(gòu)器里邊對(duì)它進(jìn)行關(guān)閉
}
void StoreQuote::inputQuote()
{std::getline(std::cin,quote);//寫入這句話,把他寫進(jìn)quote這個(gè)字符串里邊
}
void StoreQuote::inputSpeaker()
{std::getline(std::cin,speaker);//寫入作者,把他寫入speaker這個(gè)字符串里邊
}
bool StoreQuote::write()//把剛才的兩個(gè)給寫入文件里邊
{if(fileOutput.is_open()){fileOutput<<qupte<<"i"<<speaker<<"\n";return true;}else{return false;}
}
int main()
{StoreQuote quote;std::cout<<"請(qǐng)輸入一句話:\n";quote.inputQuote();//調(diào)用這個(gè)函數(shù)std::cout<<"請(qǐng)輸入作者:\n";quote.inputSpeaker();if(quote.write())//判斷是否成功的寫入文件{std::cout<<"成功寫入文件";}else{std::cout<<"寫入文件失敗":return 1;}return 0;//main函數(shù)的默認(rèn)返回值}

?

總結(jié)

以上是生活随笔為你收集整理的C++:随笔4--对象的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。