我的隨行筆記8 C++ Primer Plus

qwer1030274531發表於2020-09-01

1.類物件的程式透過訪問公有成員函式(或友元函式)來訪問物件的私有成員。(類方法可以訪問類的私有成員)


組成類介面的成員函式放在公有部分。


2.要建立類物件,可以宣告類變數,也可以使用new為類物件分配儲存空間。可以將物件作為函式的引數和返回值,也可將物件賦值給另一個


3.ostream類中包含控制格式的成員函式setf(),可以修改輸出資料格式,統一格式。


std::cout.setf(std::ios_base::fixed, std::ios_base::floatfield)  //設定cout物件的一個標記,命令cout使用定點表示法


std::count.precision(3);   //cout在使用定點表示法時顯示3為小數


std::ios_base::fmtflags orig=std::cout.setf(std::ios_base::fixed); //保留原始標記


std::streamsize prec=std::cout.precision(3);//保留原始值


.................... std::count.precision(2);.................


std::cout.setf(orig, std::ios_base::floatfield);//重置舊格式


std::cout.precision(prec);


3.類的建構函式:構造一個和類名相同的函式,沒有返回型別,放在類宣告的公有部分。


使用建構函式來初始化類物件。可建立多個同名的建構函式,(過載,引數列表不同)


類的解構函式:類物件過期時,解構函式將被自動呼叫。


//Stock是一個類名


建構函式:


Stock::Stock(const string &co="Error", int n=0, double pr=0.0);//所有引數為預設值的建構函式 


Stock::Stock();    //沒有引數的預設建構函式,只有沒有提供任何建構函式時,編譯器提供預設的建構函式此時宣告Stock stock1; 有效


Stock::Stock(const std::string &co, long n, double pr){        }  //建構函式 若提供了非預設建構函式,宣告Stock stock1; 無效


//要建立物件,又不顯示初始化,必須自行定義一個不接受任何引數的預設建構函式


//使用者提供的預設建構函式通常給所有成員提供了隱式初始值


Stock first();   //這是一個返回Stock物件的函式


Stock second;  //呼叫隱式的建構函式,不用括號


解構函式 :


Stock::~Stock() { }  //解構函式  


初始化類物件方法:


Stock stock1("NanoSmart", 12, 20.0);  //用建構函式來初始化類物件 stock1法1


Stock stock2 = Stock("Assuing Obj", 2, 2.0); //用建構函式來初始化類物件stock2法2


Stock *pstock= new Stock("Assuing Obj", 2, 2.0) ; //將初始化物件的地址賦給pstock


C++11列表化可以初始化物件Stock stock2={ "Assuing Obj", 2, 2.0 };  //可省略=


宣告類物件陣列:


Stock mystuff[4];


初始化: Stock mystuff[4]={ Stock("Assuing Obj", 2, 2.0), Stock("ALEX ", 5, 6.0), Stock("Helenng Obj", 2, 2.0),Stock("Nihlyssuing Obj", 2, 2.0)};


4.const成員函式(函式不會修改呼叫物件)


類中宣告:void show() const;


定義:void Stock::show() const  {   } 


5.this 指標設定為類方法呼叫它自己本身物件的地址。要引用整個呼叫物件則可用*this; 呼叫物件的成員函式:this->show


6.類作用域中的常量:


class Bakbery{


private: enum {Months=12};   //這種方式宣告列舉並不會建立類資料成員,即所有物件中不包含列舉。在作用域為Bakbery類的                                                   //程式碼中遇到Months,編譯器用12替代


(或)static const int Months=12;


...};


7.作用域內的列舉:


enum class egg {Small,Medium,Large,Jumbo};


enum class shirt{Small,Medium,Large,XLarge}; //可用struct代替class


egg ch=egg::Large;


shirt Flod=shirt::Large;


8.函式的引數是字串時,不用用char陣列,可以用char* 或 string 


用char * 時,字串賦值可以srtncpy()函式


用string時,可直接賦值,要包含標頭檔案string 


class Bankcount {


private: char name[40]; char acctnum[25]; double balance; 


public:   Bankcount( const char * client, conat char * num,dounle bail=0) 


//或 Bankcount( const std::string & client,  const std::string & num,  dounle bail=0)


................}; 


Bankcount::Bankcount( const char * client, conat char * num,dounle bail)


{ srtncpy(name,client,39); name[39]='\0';  srtncpy(acctnum,num,24); name[24]='\0';  balance=bail }


//或者 Bankcount( const std::string & client,  const std::string & num,  dounle bail)


{ name=client; acctnum=num; balance= bail; }


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30239065/viewspace-2716169/,如需轉載,請註明出處,否則將追究法律責任。

相關文章