首页 > 解决方案 > 如何从 C++ 中的子类访问父类的成员变量?

问题描述

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。

标签: c++oopinheritance

解决方案


由于当前编写的代码,有问题的 3 个字段都privateA其中,因此根本无法访问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一个friendto A,例如:
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;
}

推荐阅读