C++继承类

  技术

参见 教程1 教程2

当创建一个类时,您不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类(Base),新建的类称为派生类(Derive)。

实例

#include <iostream>
 
using namespace std;
 
// 基类
class Shape 
{
   public:
      void setWidth(int w)
      {
         width = w;
      }
      void setHeight(int h)
      {
         height = h;
      }
   protected:
      int width;
      int height;
};
 
// 派生类
class Rectangle: public Shape
{
   public:
      int getArea()
      { 
         return (width * height); 
      }
};
 
int main(void)
{
   Rectangle Rect;
 
   Rect.setWidth(5);
   Rect.setHeight(7);
 
   // 输出对象的面积
   cout << "Total area: " << Rect.getArea() << endl;
 
   return 0;
}

也可以继承多个类

class C :public A, public B//A,B都是公有继承
{
    int c;
    void c()
    {}
};

继承的类型:public, protected, private

public 继承

基类public,继承后还是public,基类是protected,继承后还是protected, 基类的private内容无法访问

原public属性的成员继承后为public属性

原protected属性的成员继承后为protected属性,

原private成员仍为private属性

protected继承

原public,protected属性的成员继承后为protected属性,原private成员仍为private属性

private继承

私有继承即所有基类成员均变成派生类的私有成员,基类的私有成员仍然不能在派生类中访问。

继承构造函数

如果不做说明,继承类是不会继承基类的构造函数的。如果需要继承构造函数,从 C++11 开始,可以使用 using 来声明继承基类的构造函数,我们可以这样书写。

class Base {
public:
	Base(int v) :_value(v), _c('0'){}
	Base(char c): _value(0), _c(c){}
private:
	int _value;
	char _c;
};

class Derived :public Base {
public:
	// 使用继承构造函数
	using Base::Base;

	// 假设派生类只是添加了一个普通的函数
	void display() {
		//dosomething		
	}
};