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 默认情况下是公共的。
相关文章
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()函数在串口监视器上显示变量值。