在C++中,struct
和class
在语法和功能上非常相似,但它们在默认成员访问权限上有一些显著的区别。默认情况下,struct
的成员是public
的,而class
的成员是private
的。除此之外,struct
可以像class
一样拥有成员函数、成员变量、构造函数、析构函数,以及实现继承和多态。
继承的概念
继承是面向对象编程中的一个核心概念,它允许一个类(称为子类或派生类)继承另一个类(称为基类或父类)的属性和方法。通过继承,子类可以重用父类的代码,扩展或覆盖父类的功能。
C++中的struct继承
在C++中,struct
可以继承另一个struct
或class
,并且遵循C++的继承规则。这意味着子类(无论是class
还是struct
)可以访问父类(无论是class
还是struct
)的public
和protected
成员。
代码举例
下面是一个简单的例子,展示了如何在C++中使用struct
进行继承:
#include <iostream>
#include <string>
// 定义一个基类(struct)
struct Person {
std::string name;
int age;
// 构造函数
Person(const std::string& name, int age) : name(name), age(age) {}
// 成员函数
void display() const {
std::cout << "Name: " << name << ", Age: " << age << std::endl;
}
};
// 定义一个派生类(struct),继承自Person
struct Student : public Person {
int studentId;
std::string course;
// 构造函数
Student(const std::string& name, int age, int studentId, const std::string& course)
: Person(name, age), studentId(studentId), course(course) {}
// 成员函数
void displayStudentInfo() const {
display(); // 调用基类的成员函数
std::cout << "Student ID: " << studentId << ", Course: " << course << std::endl;
}
};
int main() {
// 创建一个Student对象
Student student("Alice", 20, 12345, "Computer Science");
// 显示学生信息
student.displayStudentInfo();
return 0;
}
代码解释
基类定义:
Person
结构体包含两个成员变量:name
和age
。构造函数用于初始化这些成员变量。 display
成员函数用于打印Person
的信息。
派生类定义:
Student
结构体继承自Person
结构体。Student
包含额外的成员变量:studentId
和course
。构造函数同时初始化 Person
和Student
的成员变量。displayStudentInfo
成员函数调用基类的display
成员函数,并打印学生特有的信息。
主函数:
创建一个 Student
对象并初始化。调用 displayStudentInfo
成员函数显示学生的完整信息。
总结
C++中的struct
可以像class
一样进行继承,并且遵循C++的继承规则。通过继承,子类可以重用父类的代码,并扩展其功能。在定义和使用struct
进行继承时,需要注意成员变量的访问权限和构造函数的调用顺序。