1. 程式人生 > >【C++】工作中遇到的難點

【C++】工作中遇到的難點

一,explicit
C++ explicit關鍵字用來修飾類的建構函式,表明該建構函式是顯式的。
建構函式有顯示和隱式之分。建構函式預設的式隱式的,如下:

1. class MyClass  
2. {  
3. public:  
4. MyClass( int num );  
5. }  
6. //.  
7. MyClass obj = 10; //ok,convert int to MyClass 

在上面的程式碼中編譯器自動將整型轉換為MyClass類物件,實際上等同於下面的操作:

1. MyClass temp(10);  
2. MyClass obj = temp; 

這樣就進行了隱式轉換。若是不想物件被這樣賦值就需要使用explicit關鍵字。在宣告建構函式的時候前面新增上explicit即可,這樣就可以防止這種自動的轉換操作。如下所示:

1. class MyClass  
2. {  
3. public:  
4. explicit MyClass( int num );  
5. }  
6. //.  
7. MyClass obj = 10; //err,can't non-explict convert 

再賦值時會報錯。

二,provide?

cin.ignore(256,’\n’)
表示對於輸入的數來說,會忽略”\n”之前的數,但是忽略的最大長度為256個字元。

三,技巧

while (true) {
    cout << "Enter a phone number (or leave blank to finish): ";
    string number;
    getline(cin, number);
    if (number.empty()) {
      break;
    }
}
for (int j = 0; j < person.phones_size(); j++) {
      const tutorial::Person::PhoneNumber& phone_number = person.phones(j);
      switch
(phone_number.type()) { case tutorial::Person::MOBILE: cout << " Mobile phone #: "; break; case tutorial::Person::HOME: cout << " Home phone #: "; break; case tutorial::Person::WORK: cout << " Work phone #: "; break; } cout << phone_number.number() << endl; }

四,cerr ?

cerr << "Usage:  " << argv[0] << " ADDRESS_BOOK_FILE" << endl;

五,fstream

fstream output("./log", ios::out | ios::trunc | ios::binary);