如果基类定义了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,不能访问。