南飓风 发表于 2025-4-11 21:46:01

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]
查看完整版本: C++中static与private继承关系解析