public/private 控制存取權限this` 指標成員函數隱含參數,指向調用物件。型別為 ClassName* const(非 const 成員函數)或 const ClassName* const(const 成員函數)。
class Sales_data {
public:
std::string isbn() const { return bookNo; } // 可被 const 物件調用
Sales_data& combine(const Sales_data&); // 非 const,可修改物件
private:
std::string bookNo;
};
規則:const 物件/參考/指標只能調用 const 成員函數。
void Sales_data::combine(...)class Sales_data {
public:
Sales_data() = default; // C++11 顯式預設
Sales_data(const std::string& s) : bookNo(s), units_sold(0), revenue(0) {}
Sales_data(std::istream& is) { read(is, *this); }
private:
std::string bookNo;
unsigned units_sold = 0; // 類內初始值 (C++11)
double revenue = 0.0;
};
Sales_data() : Sales_data("") {}Sales_data(const Sales_data&)Sales_data& operator=(const Sales_data&)~Sales_data()std::vector/std::string 避免手動管理)class Foo {
friend void bar(Foo&); // 友元函數
friend class Baz; // 友元類別
private:
int secret;
};
class Screen {
public:
using pos = std::string::size_type; // 類型別名
class Iterator { ... }; // 巢狀類別
};
class Cache {
mutable int accessCount; // const 成員函數中也可修改
public:
int get() const { ++accessCount; return data; }
};
explicitexplicit 防止隱式轉換,僅允許直接初始化explicitpublic、無建構子、無類內初始值、無基類/虛函數 → 支援列表初始化constexpr,需滿足字面值型別要求constexpr 建構子/函數:編譯期計算,極大優化執行效能class Account {
public:
static double interestRate(); // 靜態成員函數,無 this
static void rate(double);
private:
static double rate_; // 靜態資料成員
static constexpr int period = 30; // 常量表達式,可類內初始化
};
// 類外定義(非 constexpr 必須)
double Account::rate_ = 0.05;
double Account::interestRate() { return rate_; }
this,不可 const