21xrx.com
2024-09-20 08:56:32 Friday
登录
文章检索 我的文章 写文章
C++中的三种类继承方式
2023-07-05 11:22:26 深夜i     --     --
单继承 (Single Inheritance) 多继承 (Multiple Inheritance) 虚拟继承 (Virtual Inheritance)

在面向对象程序设计中,继承是一种重要的概念,它允许新的类或子类(派生类)在现有的类(基类)的基础上扩展功能。在C++中,有三种类继承的方式:公有继承、私有继承和保护继承。

1. 公有继承

公有继承是C++中最常用的继承方式,也是默认的继承方式。通过公有继承,派生类可以继承所有基类的公有成员(变量、函数),但不能继承基类的私有成员。派生类中新增的成员可能会与基类中的成员重名,在这种情况下,可以使用作用域限定符(::)来区分两个成员。

示例代码:


class Base {

public:

  void func1()

    // ...

  

private:

  int value;

};

class Sub : public Base {

public:

  void func2()

    // ...

  

};

int main() {

  Sub s;

  s.func1(); //可以调用基类中的公有成员函数

  s.func2(); //可以调用派生类中新增的公有成员函数

  return 0;

}

2. 私有继承

私有继承使得基类中的公有和保护成员在派生类中都变成了私有成员,派生类中不能访问它们。私有继承通常用于实现多态性,如模板方法设计模式。通过在基类中定义一个虚函数,然后在派生类中重写该函数,就可以实现多态。

示例代码:


class Base {

public:

  virtual void func()

    // ...

  

};

class Sub : private Base {

public:

  void func() override

    // ...重写基类中的函数

  

};

int main() {

  Sub s;

  s.func(); //OK

  Base b = s; //错误:不能隐式转换

  return 0;

}

3. 保护继承

保护继承只允许派生类和基类中的成员访问基类的保护成员,基类的公有成员和私有成员在派生类中均不可访问。通常在实现继承时,如果想将基类的实现细节隐藏起来,而将基类的接口暴露给派生类,可以使用保护继承。

示例代码:


class Base

protected:

  int value;

;

class Sub : protected Base {

public:

  void setValue()

    value = 10; //OK

  

};

int main() {

  Sub s;

  s.setValue();

  Base b = s; //错误:基类的保护成员不能被外部访问

  return 0;

}

综上所述,C++中的三种类继承方式各有特点,可以根据实际需求选择合适的方式。公有继承是最常用的方式,私有继承通常用于实现多态性,而保护继承用于隐藏基类的实现细节。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复