如果基类定义了static成员,则整个继承层次中中只有一个这样的成员。无论从基类派生出多少个派生类,每个static成员只有一个。
static成员遵循常规访问控制:若果成员在基类中为private,则派生类不能访问它。假定可以访问成员,则既可以通过基类访问static成员,也可以通过派生类访问static成员。
验证:
#include <iostream> using namespace std; class base { public: base() {} static int public_val; private: static int private_val; }; int base::public_val = 1; int base::private_val = 2; class derived: public base { public: derived() {}; void fun(const base &, const derived &); }; void derived::fun(const base &base_obj, const derived &derived_obj) { cout << base::public_val << endl; cout << base::private_val << endl; //error cout << derived::public_val << endl; cout << derived::private_val << endl;//error cout << base_obj.public_val << endl; cout << base_obj.private_val << endl;//error cout << derived_obj.public_val << endl; cout << derived_obj.private_val << endl;//error } int main() { base b; derived d; return 0; }
error表示:因为该成员为private,不能访问。