非静态成员函数
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)); }
};