非静态成员函数

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