C++ 中公共继承、私有继承和受保护继承之间的区别
继承是面向对象编程中的一个基本概念。 它可以帮助您扩展类的功能。 继承允许您重用已在一个类中编写和测试的代码,并在另一个类中使用它,从而节省时间、减少错误并简化程序的设计。
继承可以称为类之间的 is-a 关系。 因此,举例来说,如果我们说一辆汽车是一辆汽车,那么我们就是在说所有汽车都是汽车,所有汽车都是汽车。
在本文中,我们将讨论以下三种类型的继承:
- Public 继承
- Private 继承
- Protected 继承
但是,在讨论继承类型之前,我们将讨论 C++ 中基类和派生类的概念。
C++ 中的基类和派生类
基类和派生类用于创建对象的层次结构。 原始类称为基类,而其他继承的类则被视为派生类。
基类为所有成员提供默认实现,必要时可以由派生类覆盖。
派生类可以访问其基类的所有非私有成员。 因此,为了防止派生类的成员函数访问基类成员,应将这些基类成员在基类中设为私有。
C++ 中的公共继承
公共继承是一种继承类型,其中一个类获取另一个类的功能或属性。 它可以看作是 is-a 关系的实现,其中继承类被认为是继承类的扩展或特化。
当一个类从公共基类派生时,基类的公共成员将成为派生类的公共成员,基类的受保护成员将成为派生类的受保护成员。 基类的私有成员永远无法从派生类轻松访问,但可以通过调用基类的公共和受保护成员来检索它们。
#include <iostream>
using namespace std;
class Demo {
private:
int x = 56;
protected:
int y = 27;
public:
int z = 67;
int getX() {
return x;
}
};
class PublicInheritance : public Demo {
public:
int getY() {
return y;
}
};
int main() {
PublicInheritance sam;
cout << "Private member = " << sam.getX() << endl;
cout << "Protected member= " << sam.getY() << endl;
cout << "Public member= " << sam.z << endl;
return 0;
}
单击此处检查上述代码的工作情况。
C++ 中的受保护继承
受保护的继承是基类受到保护的继承形式。 这意味着派生类将把基类的所有公共成员和受保护成员作为受保护成员。
从受保护的基类派生在特定情况下有其好处。 例如,如果您想创建一组相关的类,但又不想将它们公开,因为它们仅供内部使用,那么这将是一个合适的解决方案。
#include <iostream>
using namespace std;
class Demo {
private:
int x = 56;
protected:
int y = 27;
public:
int z = 67;
int getX() {
return x;
}
};
class ProtectedInheritance : protected Demo {
public:
int getY() {
return y;
}
int getZ() {
return z;
}
};
int main() {
ProtectedInheritance sam;
cout << "Protected member= " << sam.getY() << endl;
cout << "Public member= " << sam.getZ() << endl;
return 0;
}
单击此处检查上述代码的工作情况。
C++ 中的私有继承
私有继承是指派生类从私有基类继承。 这意味着任何公共或受保护的基类成员都将成为派生类的私有成员。
当您想要创建仅提供其超类的部分功能的子类时,这可能很有用。
#include <iostream>
using namespace std;
class Demo {
private:
int x = 56;
protected:
int y = 27;
public:
int z = 67;
int getX() {
return x;
}
};
class PrivateInheritance : private Demo {
public:
int getY() {
return y;
}
int getZ() {
return z;
}
};
int main() {
PrivateInheritance sam;
cout << "Protected member= " << sam.getY() << endl;
cout << "Public member= " << sam.getZ() << endl;
return 0;
}
相关文章
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()函数在串口监视器上显示变量值。