迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > C++ >

C++ 中的结构体继承

作者:迹忆客 最近更新:2023/08/26 浏览次数:

结构体和类很相似,但不同之处在于它们对面向对象编程中其他类或函数的可访问性。

默认情况下,结构被指定为公共的,而类是私有的。 并且在继承中,我们不能继承私有指定的类; 我们必须手动将类声明为 public,而结构默认是 public,因此我们可以轻松继承它们。


C++ 中的继承是什么

继承是面向对象编程的核心概念之一,其背后的原因是它提高了代码的可重用性和层次分类的创建。

借助继承,您可以定义一个通用类,该类定义一些函数来执行一些基本操作,并将其扩展到其他类以继承这些函数。 我们通过图来理解一下。

cpp中的继承

在这个例子中,我们有狗和猫,它们都是不同的动物,但最终都属于动物宠物类别。

这两个类都有一些相同的特征,比如吃饭、睡觉和行走,这些特征可以存储在 Pet 类(也称为基类)中,而它们特有的特征(如声音和大小)可以在 Dog 和 Cat 类中定义,也称为基类。 称为派生类。

这种类型的继承称为单一继承。 还有其他不同的类型,我们将在下面一一讨论。

代码示例:

#include<iostream>
using namespace std;

// Base class
struct Pet {
  void eat() {
   cout << "I can eat i am pet \n" ;
  }
   void sleep() {
   cout << "I can sleep i am pet \n" ;
  }
   void walk() {
   cout << "I can walk i am pet \n" ;
  }
};
// Derived class
struct Cat: Pet {
  void sound() {
   cout << "I am a cat Meow Meow! \n" ;
  }
};
// Derived class
struct Dog: Pet {
  void sound() {
   cout << "I am a dog Bark Bark! \n" ;
  }
};

int main() {
 cout<<"This is Cat's characteristics"<< endl;

 Cat myCat;
 myCat.eat();
 myCat.sleep();
 myCat.walk();
 myCat.sound();

 cout<<"\nThis is Dog's characteristics"<< endl;

 Dog myDog;
 myDog.eat();
 myDog.sleep();
 myDog.walk();
 myDog.sound();
 }

输出:

This is Cat's characteristics
I can eat i am pet
I can sleep i am pet
I can walk i am pet
I am a cat Meow Meow!

This is Dog's characteristics
I can eat i am pet
I can sleep i am pet
I can walk i am pet
I am a dog Bark Bark!

在此示例中,Pet 是基类,而 Cat 和 Dog 是派生类。 Pet定义了猫和狗的一些常见行为,因此我们不会在每个类中都定义它们,以避免代码冗余。

Dog 和 Cat 扩展了这些常见行为,并在它们自己的派生类中定义了它们的特定行为。

Dog 和 Cat 类只有一种行为 sound(),而另一种则来自基类。 而这些派生类的目的就是使用基类的其他功能。


C++ 中的继承类型

C++支持不同类型的继承,这为根据场景使用每种继承提供了开放的选择。 让我们一一来看看。

  1. 单一继承
  2. 多重继承
  3. 多级继承
  4. 层次继承
  5. 混合继承

单一继承

在单继承中,我们有一个基类和一个派生类。 这种类型已经在第一个示例中进行了解释。

句法:

class derivedClass_name : access_mode base_class
{
 // body of the derived class
};

多重继承

在多重继承中,我们可以将多个基类的功能和属性继承到一个派生类中。

多重继承

句法:

class derivedClass_name : access_mode base_class1, access_mode base_class2, ....
{
 // body of the derived class
};

多级继承

每种类型的继承都允许您从基类继承,但多级继承的功能远不止于此。 它允许你做多级继承,允许你从派生类继承到其他子类。

多级继承

Animalspets 是基类,而 cat 是从这两个基类继承函数和属性的派生类。

分层继承

在层次继承中,多个子类是从层次结构中的单个基类继承的。 而且,多个派生类是从单个基类创建的。

这是一种高级的继承类型。

层次继承

混合继承

顾名思义,这种类型的继承包括更多不同类型的继承,例如分层继承和多重继承。 可以进行任何组合以实现混合继承。

混合继承

在这个例子中,我们有两种不同类型的继承,单一继承和分层继承,作为混合继承。


C++ 中的结构体继承

在 C++ 中,struct 是一个关键字,用于定义类似于类的结构,但有细微差别。 结构体和类之间的核心区别在于,结构体的成员默认是公共的,而类是私有的,这会导致安全问题。

结构不太安全,因为功能和属性并未对最终用户隐藏。 另一方面,类是安全的,因为它们可以向最终用户隐藏编程实现。

结构体的一般语法:

 struct structureName{
   member1;
   member2;
   .
   .
   memberN;
 };

由于继承是面向对象编程的核心特性,因此结构也可以使用此特性。 结构继承需要 struct 关键字而不是 class。

C++ 中的结构继承:

#include<iostream>
using namespace std;

// Base class
struct Pet {
  void eat() {
   cout << "I can eat i am pet \n" ;
  }
};

struct Dog: Pet {
  void sound() {
   cout << "I am a dog Bark Bark! \n" ;
  }
};

int main() {
 cout<<"\nThis is Dog's characteristics"<< endl;
 Dog myDog;
 myDog.eat();
 myDog.sound();
}

输出:

This is Dog's characteristics
I can eat i am pet
I am a dog Bark Bark!

我们在结构名称之前使用了 struct 这个词; 如果您注意到我们没有在结构体中使用 public 一词,那么它看起来与类类似,因为 struct 默认情况下是公共的。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Arduino 中停止循环

发布时间:2024/03/13 浏览次数:444 分类:C++

可以使用 exit(0),无限循环和 Sleep_n0m1 库在 Arduino 中停止循环。

Arduino 复位

发布时间:2024/03/13 浏览次数:315 分类:C++

可以通过使用复位按钮,Softwarereset 库和 Adafruit SleepyDog 库来复位 Arduino。

Arduino 的字符转换为整型

发布时间:2024/03/13 浏览次数:181 分类:C++

可以使用简单的方法 toInt()函数和 Serial.parseInt()函数将 char 转换为 int。

Arduino 串口打印多个变量

发布时间:2024/03/13 浏览次数:381 分类:C++

可以使用 Serial.print()和 Serial.println()函数在串口监视器上显示变量值。

Arduino if 语句

发布时间:2024/03/13 浏览次数:123 分类:C++

可以使用 if 语句检查 Arduino 中的不同条件。

Arduino ICSP

发布时间:2024/03/13 浏览次数:214 分类:C++

ICSP 引脚用于两个 Arduino 之间的通信以及对 Arduino 引导加载程序进行编程。

使用 C++ 编程 Arduino

发布时间:2024/03/13 浏览次数:127 分类:C++

本教程将讨论使用 Arduino IDE 在 C++ 中对 Arduino 进行编程。

Arduino 中的子程序

发布时间:2024/03/13 浏览次数:168 分类:C++

可以通过在 Arduino 中声明函数来处理子程序。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便