C++中static与private继承关系解析
1. static 成员与继承[*]静态成员属于类本身,而非类的实例。
[*]子类不会继承父类的静态成员,但可以通过父类的作用域访问它们。
[*]静态成员不参与多态,无法通过子类覆盖(override)。
示例:
#include<iostream>
using namespace std;
class Parent {
public:
static int staticVar;
static void staticMethod() { cout<<"#################\n"<<endl; }
};
class Child : public Parent {
// Child 不继承 staticVar 和 staticMethod,但可以直接访问它们
};
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; } // 间接修改父类 private 成员
};
class Child : public Parent {
public:
void modify() {
// privateVar = 10; // 错误:无法直接访问父类 private 成员
protectedVar = 20; // 允许访问父类 protected 成员
cout<<"&&2 :"<<Childer.protectedVar<<endl;
setPrivate(30); // 通过父类公有方法间接修改 private 成员
}
};
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 a = privateStaticVar;// 错误:无法访问父类 private 静态成员
int b = publicStaticVar; // 允许访问父类 public 静态成员
int c = getPrivateStatic(); // 通过父类接口间接访问
}
};
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]