C ++-访问基类的受保护/私有成员

Q_A

我正在尝试一个小例子来实践继承和多态性的概念。这是我的代码的简化版本:

class Shape {
protected:
    int length;
    int width;
public:
    virtual void setLength(int l) = 0;
    virtual void setWidth(int w) = 0;
};

class Rectangle : public Shape {
public:
    Rectangle(int l, int w)
    : length(l), width(w)
    { }

    void setWidth(int w) { width = w; }
    void setLength(int l) { length = l; }
};

int main() {
    Rectangle r(0,0);
}

我正在尝试运行上述程序。但是,当我编译rectangle.cc时,出现以下错误

g++ -c rectangle.cc

rectangle.cc: In constructor 'Rectangle::Rectangle(int, int)':
rectangle.cc:13:5: error: class 'Rectangle' does not have any field named 'length'
rectangle.cc:13:16: error: class 'Rectangle' does not have any field named 'width'

据我了解,在公共继承中,基类的受保护成员成为派生类的受保护成员,应该能够像公共成员一样被访问。那不对吗?另外,如果长度和宽度是基类的私有成员,那么该如何修改代码?

巴里

据我了解,在公共继承中,基类的受保护成员成为派生类的受保护成员,应能够像公共成员一样被访问。那不对吗?

基本上是对的。在派生类中可以访问基类的公共成员和受保护成员(public继承在这里无关紧要-仅影响外部观察者的访问)。但是,(具有任何访问权限的)类成员只能在自己的类中初始化在这种情况下,只能Shape初始化,length并且width-没关系,protected如果是public,也是如此private

您必须添加一个构造函数来执行此操作,您的Rectangle构造函数可以简单地委派给构造函数。这无论作品的访问控制lengthwidth(只要Shape构造函数publicprotected):

struct Shape {
    Shape(int l, int w) : length(l), width(w) { }
};

struct Rectangle {
    Rectangle(int l, int w) : Shape(l, w) { }
};

或者,为了完整起见,您可以只分配它们,但绝对希望对其进行Shape初始化。此外,这仅在所涉及的成员为public时才有效protected

Rectangle(int l, int w) {
    length = l;
    width = w;
}

请注意,您setWidth()setLength()功能都很好-你访问这些保护成员Rectangle的成员函数。只是不用于初始化。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

私有成员和受保护成员:C ++

来自分类Dev

C ++ | 派生类正在访问基类的私有成员,而不是其自己的私有成员

来自分类Dev

为什么 C++ 模板类可以访问其基类的私有成员?

来自分类Dev

访问派生类C ++的私有成员

来自分类Dev

无法从C ++中的类内部访问私有成员?

来自分类Dev

C ++继承中受保护的成员变量和私有成员变量

来自分类Dev

C ++:访问该类的私有成员

来自分类Dev

使公共成员变量访问C ++中同一类的私有成员

来自分类Dev

重写派生类C ++中基类私有成员的行为

来自分类Dev

C ++类模板函数可以访问嵌套类的私有成员

来自分类Dev

无法使用派生类访问类的私有成员的 C++ 代码

来自分类Dev

在 C++ 中实现复制控制时如何处理基类的私有成员?

来自分类Dev

错误C2248:无法访问在类中声明的私有成员

来自分类Dev

如何启用朋友类的朋友功能直接在C ++中访问其私有成员

来自分类Dev

如何从Swift扩展访问Objective-C类的私有成员?

来自分类Dev

C ++如何在std :: for_each内部的类中访问私有成员

来自分类Dev

C ++朋友类可以访问其基类的所有成员吗?

来自分类Dev

c ++模板模板:无法访问私有成员

来自分类Dev

成为私有成员(c ++类)意味着什么?

来自分类Dev

C ++访问私有类成员

来自分类Dev

使用 C++ 并修改基类的私有/受保护属性

来自分类Dev

错误C2248:无法访问在类中声明的私有成员,编译器行为异常

来自分类Dev

错误C2248:“ CvSVM :: CvSVM”:无法访问在类“ CvSVM”中声明的私有成员

来自分类Dev

错误:C2248:'QVariant :: QVariant':无法访问在类'QVariant'中声明的私有成员

来自分类Dev

如何修复Unreal和C ++中的“无法访问在类中声明的私有成员”错误

来自分类Dev

错误C2248:“ klientPracownik :: klientPracownik”:无法访问在类“ klientPracownik”中声明的私有成员

来自分类Dev

C ++:无法从派生类访问受保护的成员

来自分类Dev

访问派生类 C++ 中的受保护成员

来自分类Dev

没有私有成员的 C# 类成员验证

Related 相关文章

  1. 1

    私有成员和受保护成员:C ++

  2. 2

    C ++ | 派生类正在访问基类的私有成员,而不是其自己的私有成员

  3. 3

    为什么 C++ 模板类可以访问其基类的私有成员?

  4. 4

    访问派生类C ++的私有成员

  5. 5

    无法从C ++中的类内部访问私有成员?

  6. 6

    C ++继承中受保护的成员变量和私有成员变量

  7. 7

    C ++:访问该类的私有成员

  8. 8

    使公共成员变量访问C ++中同一类的私有成员

  9. 9

    重写派生类C ++中基类私有成员的行为

  10. 10

    C ++类模板函数可以访问嵌套类的私有成员

  11. 11

    无法使用派生类访问类的私有成员的 C++ 代码

  12. 12

    在 C++ 中实现复制控制时如何处理基类的私有成员?

  13. 13

    错误C2248:无法访问在类中声明的私有成员

  14. 14

    如何启用朋友类的朋友功能直接在C ++中访问其私有成员

  15. 15

    如何从Swift扩展访问Objective-C类的私有成员?

  16. 16

    C ++如何在std :: for_each内部的类中访问私有成员

  17. 17

    C ++朋友类可以访问其基类的所有成员吗?

  18. 18

    c ++模板模板:无法访问私有成员

  19. 19

    成为私有成员(c ++类)意味着什么?

  20. 20

    C ++访问私有类成员

  21. 21

    使用 C++ 并修改基类的私有/受保护属性

  22. 22

    错误C2248:无法访问在类中声明的私有成员,编译器行为异常

  23. 23

    错误C2248:“ CvSVM :: CvSVM”:无法访问在类“ CvSVM”中声明的私有成员

  24. 24

    错误:C2248:'QVariant :: QVariant':无法访问在类'QVariant'中声明的私有成员

  25. 25

    如何修复Unreal和C ++中的“无法访问在类中声明的私有成员”错误

  26. 26

    错误C2248:“ klientPracownik :: klientPracownik”:无法访问在类“ klientPracownik”中声明的私有成员

  27. 27

    C ++:无法从派生类访问受保护的成员

  28. 28

    访问派生类 C++ 中的受保护成员

  29. 29

    没有私有成员的 C# 类成员验证

热门标签

归档