非靜態成員函式

classstruct 可以具有成員函式以及成員變數。這些函式的語法大多類似於獨立函式,可以在類定義的內部或外部定義; 如果在類定義之外定義,則函式的名稱以類名稱和範圍(::)運算子為字首。

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)); }
};