📅  最后修改于: 2023-12-03 15:14:03.841000             🧑  作者: Mango
在C++中,继承是面向对象编程的核心概念之一。继承是指一个对象(称之为子类)可以从另一个对象(称之为超类或父类)继承属性和方法。子类可以增加或修改继承来的属性和方法,从而实现代码的重用和扩展性。
在C++中,继承有三种类型:公有继承、私有继承和保护继承。
公有继承是指子类继承父类的公共成员变量和公共成员函数。公共成员可以被子类对象和子类的成员函数直接访问。公有继承的语法如下:
class ChildClass : public ParentClass {
// 子类的其他成员变量和成员函数
};
私有继承是指子类继承父类的私有成员变量和私有成员函数。私有成员只能在父类中访问,子类对象和子类的成员函数都不能直接访问。私有继承的语法如下:
class ChildClass : private ParentClass {
// 子类的其他成员变量和成员函数
};
保护继承是指子类继承父类的保护成员变量和保护成员函数。保护成员只能在父类和子类中访问,不能在其他地方访问。保护继承的语法如下:
class ChildClass : protected ParentClass {
// 子类的其他成员变量和成员函数
};
#include <iostream>
using namespace std;
// 基类
class Person {
public:
string name;
int age;
virtual void introduce() {
cout << "My name is " << name << ", and I am " << age << " years old." << endl;
}
};
// 子类1,公有继承
class Student : public Person {
public:
string school;
void introduce() {
cout << "I am a student from " << school << "." << endl;
}
};
// 子类2,私有继承
class Employee : private Person {
public:
string company;
void introduce() {
cout << "I work for " << company << " company." << endl;
}
};
// 子类3,保护继承
class Teacher : protected Person {
public:
string subject;
void introduce() {
cout << "I teach " << subject << " subject." << endl;
}
};
int main() {
// 创建基类对象
Person person;
person.name = "Tom";
person.age = 20;
person.introduce(); // "My name is Tom, and I am 20 years old."
// 创建公有继承子类对象
Student student;
student.name = "Alice";
student.age = 18;
student.school = "Harvard";
student.introduce(); // "I am a student from Harvard."
// 创建私有继承子类对象
Employee employee;
employee.name = "Bob";
employee.age = 30;
employee.company = "Apple";
// employee.introduce(); // 编译错误,不能访问父类的公共成员
// 创建保护继承子类对象
Teacher teacher;
teacher.name = "Cathy";
teacher.age = 40;
teacher.subject = "Math";
// teacher.introduce(); // 编译错误,不能访问父类的公共成员
return 0;
}
在上述示例中: