非靜態成員函式
class
或 struct
可以具有成員函式以及成員變數。這些函式的語法大多類似於獨立函式,可以在類定義的內部或外部定義; 如果在類定義之外定義,則函式的名稱以類名稱和範圍(::
)運算子為字首。
class CL {
public:
void definedInside() {}
void definedOutside();
};
void CL::definedOutside() {}
這些函式在具有點(.
)運算子的類的例項(或對例項的引用)上呼叫,或者使用箭頭(->
)運算子指向例項的指標,並且每個呼叫都繫結到函式的例項。拜訪; 當在例項上呼叫成員函式時,它可以訪問該例項的所有欄位(通過 this
指標 ),但只能訪問其他例項的欄位(如果這些例項作為引數提供)。
struct ST {
ST(const std::string& ss = "Wolf", int ii = 359) : s(ss), i(ii) { }
int get_i() const { return i; }
bool compare_i(const ST& other) const { return (i == other.i); }
private:
std::string s;
int i;
};
ST st1;
ST st2("Species", 8472);
int i = st1.get_i(); // Can access st1.i, but not st2.i.
bool b = st1.compare_i(st2); // Can access st1 & st2.
無論變數或函式的訪問修飾符如何,都允許這些函式訪問成員變數和/或其他成員函式。它們也可以無序編寫,訪問成員變數和/或呼叫在它們之前宣告的成員函式,因為在編譯器開始編譯類之前必須解析整個類定義。
class Access {
public:
Access(int i_ = 8088, int j_ = 8086, int k_ = 6502) : i(i_), j(j_), k(k_) {}
int i;
int get_k() const { return k; }
bool private_no_more() const { return i_be_private(); }
protected:
int j;
int get_i() const { return i; }
private:
int k;
int get_j() const { return j; }
bool i_be_private() const { return ((i > j) && (k < j)); }
};