如何从 C++ 中的子类访问父类的成员变量?

Posted

技术标签:

【中文标题】如何从 C++ 中的子类访问父类的成员变量?【英文标题】:How can I access the member variables of parent class from child class in c++? 【发布时间】:2020-09-25 13:54:25 【问题描述】:
class A 
int a,b,c;
public:
A(int x, int y, int z) 
  a=x;
  b=y;
  c=z;


class B: public A 



int main() 
    A ob1(10, 12, 13);

    B obj;

    return 0;

如何从 B 类对象中为 A 类对象的每个变量添加 5? TIA。

【问题讨论】:

让他们protectedpublic? 听起来你可以使用good C++ book @FredLarson 还是允许B 通过friend 访问它们? @MikeCAT:那也行! @NabidAnzum:类成员默认拥有private 访问权限,所以没有,除非您更改他们的访问权限、提供访问者或使用friend 【参考方案1】:

由于当前编写的代码,有问题的 3 个字段是 A 中的 private,因此 B 根本无法访问。您需要更改 A 以使 B 可以访问它们。通过:

使字段本身成为protectedpublic 而不是private,或者至少提供在内部使用字段的protected/public 访问器方法,例如:
class A 
protected:
    int a, b, c;
public:
    A(int x, int y, int z) 
        a = x;
        b = y;
        c = z;
    
;

class B: public A 
public:
    void add5() 
        a += 5;
        b += 5;
        c += 5;
    
;

int main() 
    A ob1(10, 12, 13);

    B obj;
    obj.add5();

    return 0;

class A 
    int a, b, c;
public:
    A(int x, int y, int z) 
        a = x;
        b = y;
        c = z;
    

    int geta() const  return a; 
    void seta(int value)  a = value; 

    int getb() const  return b; 
    void setb(int value)  b = value; 

    int getc() const  return c; 
    void setc(int value)  c = value; 
;

class B: public A 
public:
    void add5() 
        seta(geta() + 5);
        setb(getb() + 5);
        setc(getc() + 5);
    
;

int main() 
    A ob1(10, 12, 13);

    B obj;
    obj.add5();

    return 0;

使B 成为friendA,例如:
class A 
    int a, b, c;
public:
    A(int x, int y, int z) 
        a = x;
        b = y;
        c = z;
    

    friend class B;
;

class B: public A 
public:
    void add5() 
        a += 5;
        b += 5;
        c += 5;
    
;

int main() 
    A ob1(10, 12, 13);

    B obj;
    obj.add5();

    return 0;

【讨论】:

以上是关于如何从 C++ 中的子类访问父类的成员变量?的主要内容,如果未能解决你的问题,请参考以下文章

C++中子类的变量能不能覆盖父类的变量?

C++中子类从基类都继承啥?

C++ 类的继承一(访问控制)

子类从父类继承过来的方法可以操作子类自己定义的成员变量吗

子类能不能继承父类的成员变量

在c++中的继承,如何在子类中重载成员函数