21xrx.com
2024-09-20 05:57:35 Friday
登录
文章检索 我的文章 写文章
C++继承的语法格式和用法
2023-06-28 10:15:42 深夜i     --     --
C++ 继承 语法格式 继承使用方法 父类与子类 继承的优缺点

C++继承是一种重要的面向对象编程概念,它使得一个类可以从另一个类派生出新的类,并且继承了被派生类的属性和方法。在C++中,继承有以下几种类型:单继承、多继承、虚继承、抽象类继承等。不同的继承类型有不同的语法格式和用法。

1. 单继承

单继承是指一个派生类只能继承一个基类,其语法格式如下:


class 派生类名 : 基类访问权限 基类名

  //成员变量和方法

;

其中,基类访问权限可以是public、protected、private三种之一,表示派生类对基类的访问权限。如果不指定访问权限,则默认为private。

例如:


class Animal //基类

{

public:

  void eat()

  

    cout<<"Animal is eating."<<endl;

  

};

class Cat : public Animal //派生类

{

public:

  void meow()

  

    cout<<"Cat is meowing."<<endl;

  

};

在上述例子中,Cat类继承了Animal类的成员函数eat,并且添加了自己的成员函数meow。

2. 多继承

多继承是指一个派生类可以同时继承多个基类,它的语法格式如下:


class 派生类名 : 基类访问权限 基类名1, 基类访问权限 基类名2, ...

  //成员变量和方法

;

其中,基类访问权限可以是public、protected、private三种之一,可以分别指定不同的基类访问权限。多继承的主要问题在于基类之间可能存在同名成员,需要通过作用域解决。

例如:


class A

{

public:

  void func()

  

    cout<<"A's func."<<endl;

  

};

class B

{

public:

  void func()

  

    cout<<"B's func."<<endl;

  

};

class C : public A, private B

{

public:

  void func_c()

  

    cout<<"C's func_c."<<endl;

  

  void access_func()

  {

    A::func(); //通过作用域访问A类的func

    B::func(); //通过作用域访问B类的func

  }

};

在上述例子中,C类同时继承了A和B两个类,通过作用域可以分别调用不同基类的同名函数。

3. 虚继承

虚继承是为了解决多继承中的菱形继承问题而引入的,其语法格式如下:


class 派生类名 : 虚基类访问权限 virtual 基类名

  //成员变量和方法

;

其中,虚基类访问权限可以是public、protected、private三种之一,表示派生类对虚基类的访问权限。虚基类只会在第一次被继承时初始化,因此可以避免菱形继承中的多次重复初始化问题。

例如:


class Animal //虚基类

public:

  int age;

;

class Mammal : virtual public Animal //虚继承

{

public:

  void feedMilk()

  

    cout<<"Mammal is feeding milk."<<endl;

  

};

class Bat : virtual public Mammal //虚继承

{

public:

  void fly()

  

    cout<<"Bat is flying."<<endl;

  

};

class Dog : virtual public Mammal //虚继承

{

public:

  void bark()

  

    cout<<"Dog is barking."<<endl;

  

};

class BatDog : public Bat, public Dog //多继承

{

public:

  void patrol()

  

    cout<<"BatDog is patrolling."<<endl;

  

};

在上述例子中,Animal类作为虚基类,被Mammal、Bat和Dog类虚继承;Bat和Dog类再通过多继承形成BatDog类。因此,在BatDog类中只有一个Animal的实例,而不会有多个Animal实例的问题。

4. 抽象类继承

抽象类是指不能实例化的类,其目的在于让派生类继承它,并实现自己的具体方法。一个抽象类至少有一个纯虚函数,即一个没有实现的虚函数。派生类必须实现抽象类中所有的纯虚函数才能实例化。

例如:


class Shape //抽象类

{

public:

  virtual void draw() = 0; //纯虚函数,没有实现

  void setColor(int r, int g, int b)

  

    cout<<"Set color to "<<r<<" "<<g<<" "<<b<<endl;

  

};

class Circle : public Shape

{

public:

  void draw() //实现纯虚函数

  

    cout<<"Circle is drawing."<<endl;

  

};

class Square : public Shape

{

public:

  void draw()

  

    cout<<"Square is drawing."<<endl;

  

};

在上述例子中,Shape类是一个抽象类,它包含一个纯虚函数draw和一个普通函数setColor。Circle类和Square类都继承了Shape类,并实现了draw函数。

通过以上四种不同的语法格式和用法,我们可以更好地理解和应用C++的继承机制。C++继承是面向对象编程中的重要内容之一,了解它的原理和用法对于我们合理使用面向对象编程思想和提高编程能力都非常重要。

  
  

评论区

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