C++ 中的结构体继承
结构体和类很相似,但不同之处在于它们对面向对象编程中其他类或函数的可访问性。
默认情况下,结构被指定为公共的,而类是私有的。 并且在继承中,我们不能继承私有指定的类; 我们必须手动将类声明为 public,而结构默认是 public,因此我们可以轻松继承它们。
C++ 中的继承是什么
继承是面向对象编程的核心概念之一,其背后的原因是它提高了代码的可重用性和层次分类的创建。
借助继承,您可以定义一个通用类,该类定义一些函数来执行一些基本操作,并将其扩展到其他类以继承这些函数。 我们通过图来理解一下。
在这个例子中,我们有狗和猫,它们都是不同的动物,但最终都属于动物宠物类别。
这两个类都有一些相同的特征,比如吃饭、睡觉和行走,这些特征可以存储在 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++支持不同类型的继承,这为根据场景使用每种继承提供了开放的选择。 让我们一一来看看。
- 单一继承
- 多重继承
- 多级继承
- 层次继承
- 混合继承
单一继承
在单继承中,我们有一个基类和一个派生类。 这种类型已经在第一个示例中进行了解释。
句法:
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
};
多级继承
每种类型的继承都允许您从基类继承,但多级继承的功能远不止于此。 它允许你做多级继承,允许你从派生类继承到其他子类。
Animals 和 pets 是基类,而 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 的区别
发布时间: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++ 中实现具有多个条件的 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++
-
模板类用于创建共享相同实现的新类。 它们主要用于创建提供特定类型的通用实现的抽象基类。模板类是通过为所有模板类方法指定数据类型和参数来实例化的。 然后,实例化的类可以用作程