21xrx.com
2025-03-21 12:53:51 Friday
文章检索 我的文章 写文章
如何在C++中让子类继承父类的成员变量并将其改为私有?
2023-06-22 07:36:56 深夜i     --     --
C++ 继承 子类 父类 成员变量 私有

在C++中,使用继承可以方便地创建一个子类,并从父类那里继承一些成员变量和方法。但是,有时候我们希望子类能够继承父类的成员变量,但却不希望这些变量被子类直接访问和修改,而是限制为私有的。下面介绍几种方法。

方法一:使用protected关键字

在父类中将要继承的成员变量前加上protected关键字,这样在子类中就可以直接访问这些变量,但是对于外部来说仍然是私有的。

例如,假设父类定义了一个成员变量x:

class Parent {
protected:
  int x;
  /* other code */
};

若要让子类MyChild继承该变量,可以这样做:

class MyChild : public Parent {
  /* other code */
};

现在,MyChild就可以直接使用x这个变量了,但是如果在外部访问MyChild的x变量,会提示无法访问protected成员的错误。

方法二:使用getter和setter函数

另一种方法是在父类中定义getter和setter函数来访问和修改变量。getter函数可以获取变量的值,setter函数可以设置变量的值。这样,子类可以通过getter和setter函数来间接访问和修改父类的成员变量,从而实现将父类成员变量改为私有。

例如,假设父类定义了一个成员变量x和对应的getter和setter函数:

class Parent {
  int x;
public:
  int getX() const
    return x;
  
  void setX(int value)
    x = value;
  
  /* other code */
};

然后,在子类中定义自己的私有变量y,并以getter和setter函数的方式间接访问父类的x成员变量:

class MyChild : public Parent {
  int y;
public:
  int getY() const
    return y;
  
  void setY(int value) {
    y = value;
    setX(value);
  }
  /* other code */
};

这样就实现了将父类成员变量改为私有的效果。

方法三:使用构造函数

还有一种方法是,在子类的构造函数中将父类成员变量初始化为子类私有成员变量的默认值。这样,父类成员变量就被“隐藏”起来,仅能通过子类的方法来访问。

例如,假设父类定义了一个成员变量x:

class Parent {
public:
  int x;
  Parent(int value) : x(value)
  
  /* other code */
};

现在,通过子类的构造函数来初始化这个变量:

class MyChild : public Parent {
  int y;
public:
  MyChild(int value) : Parent(value), y(value)
  
  /* other code */
};

这样,MyChild就继承了Parent的x变量,并且这个变量被子类的y变量“隐藏”起来,不能直接访问。

以上是三种在C++中让子类继承父类的成员变量并将其改为私有的方法。不同的情况下,可能会有不同的选择。在实际使用时,需要根据具体情况来选择合适的方法。

  
  

评论区