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