1. static
成员与继承
静态成员属于类本身 ,而非类的实例。子类不会继承父类的静态成员 ,但可以通过父类的作用域访问它们。静态成员不参与多态 ,无法通过子类覆盖(override)。
示例:
# include <iostream> using namespace std; class Parent {
public : static int staticVar; static void staticMethod ( ) { cout<< "#################\n" << endl; }
} ; class Child : public Parent {
} ; int Parent:: staticVar = 42 ; int main ( ) { cout<< "1count():" << Parent:: staticVar<< endl; cout<< "1count():" << Child:: staticVar<< endl; Child:: staticVar = 10 ; cout<< "2count():" << Parent:: staticVar<< endl; cout<< "2count():" << Child:: staticVar<< endl; Child :: staticMethod ( ) ; Parent :: staticMethod ( ) ; Parent:: staticVar = 20 ; cout<< "3count():" << Parent:: staticVar<< endl; cout<< "3count():" << Child:: staticVar<< endl;
}
2. private
成员与继承
子类无法直接访问父类的 private
成员 (无论继承方式如何)。父类的 private
成员仍会存在于子类对象中,但只能通过父类的公有或保护方法间接访问。
示例:
# include <iostream> using namespace std; class Parent {
private : int privateVar;
protected : int protectedVar1;
public : int protectedVar; void setPrivate ( int v) { privateVar = v; }
} ; class Child : public Parent {
public : void modify ( ) { protectedVar = 20 ; cout<< "&&2 :" << Childer. protectedVar<< endl; setPrivate ( 30 ) ; }
} ; int main ( ) { Child Childer; cout<< "&&1 :" << Childer. protectedVar<< endl; Childer. modify ( ) ; cout<< "&&2 :" << Childer. protectedVar<< endl;
}
3. static
+ private
的交互
如果父类的静态成员是 private
,子类无法直接访问它,必须通过父类的公有/保护接口。
示例:
class Parent {
private : static int privateStaticVar;
public : static int publicStaticVar; static int getPrivateStatic ( ) { return privateStaticVar; }
} ; class Child : public Parent {
public : void test ( ) { int b = publicStaticVar; int c = getPrivateStatic ( ) ; }
} ;