迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > 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 默认情况下是公共的。

上一篇:C++ 中 Struct 和 Typedef Struct 的区别

下一篇:没有了

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

本文地址:

相关文章

C++ 中 Struct 和 Typedef Struct 的区别

发布时间:2023/08/27 浏览次数:94 分类:C++

This is a brief article about the difference between struct and typedef struct in C++.这篇小文章将讨论 C++ 中的关键字 typedef。 我们还将讨论 C++ 中简单结构和 typedef 结构之间的区别。C/C++ 中的 typedef 关键字 type

C++ 结构体默认值初始化

发布时间:2023/08/26 浏览次数:200 分类:C++

本文将介绍如何在 C++ 中初始化结构体中的默认值。在 C++ 中初始化结构中的默认值 初始化默认值主要有两种方法; 第一个是使用构造函数,第二个是不使用构造函数。

C++ 匿名结构体

发布时间:2023/08/26 浏览次数:159 分类:C++

本文介绍了 C++ 中匿名结构的使用。C++ 中的匿名结构体 C++ 不支持匿名结构体,因为 C 语言也不支持匿名结构,但与 C 不同,C++ 确实支持匿名联合。

在 C++ 中实现具有多个条件的 if 语句

发布时间:2023/08/26 浏览次数:185 分类:C++

C++ 逻辑运算符 && 或 || 可在 if 语句中使用以同时检查多个条件。本文将详细讨论如何在 C++ 中使用具有多个条件的 if 语句,并结合相关示例。

C++ 中的运算符优先级和结合性

发布时间:2023/08/26 浏览次数:178 分类:C++

本文将讨论 C++ 中的运算符以及它们在表达式中使用时如何求值。 它们的操作有特定的规则,因此我们将研究它们以了解使用 C++ 运算符的表达式求值。C++ 中的运算符

C++ 中的箭头运算符与点运算符

发布时间:2023/08/26 浏览次数:74 分类:C++

要了解点运算符与箭头运算符的不同之处,让我们首先了解这两个运算符的基础知识。C++ 中的点 (.) 运算符 C++ 中的点 (.) 运算符也称为类成员访问运算符,有助于访问任何给定类的公共成员。

在 C++ 中重载括号运算符

发布时间:2023/08/26 浏览次数:103 分类:C++

这个简单的编程指南将括号 ([]) 运算符重载为类对象的 getter 和 setter。首先,我们简单介绍一下运算符重载。C++ 中的运算符重载

C++ 中的一元否定运算符

发布时间:2023/08/26 浏览次数:135 分类:C++

一元减号运算符用于对数字取负,当它在变量之前使用时,它会对其值取负。一元减号运算符表示 C++ 中的前缀 - 符号。 必须在数字前加上 - 号才能将其取反;

在 C++ 中实例化模板类

发布时间:2023/08/26 浏览次数:186 分类:C++

模板类用于创建共享相同实现的新类。 它们主要用于创建提供特定类型的通用实现的抽象基类。模板类是通过为所有模板类方法指定数据类型和参数来实例化的。 然后,实例化的类可以用作程

扫一扫阅读全部技术教程

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

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便