请用代码或者某案例解释一下类的封装,继承和多态
时间: 2023-03-26 16:00:38 浏览: 51
类的封装、继承和多态是面向对象编程中的三个重要概念。
封装是指将数据和方法封装在一个类中,只对外暴露必要的接口,隐藏内部实现细节,提高代码的安全性和可维护性。例如,下面是一个简单的封装示例:
```
class Person {
private:
string name;
int age;
public:
void setName(string name) {
this->name = name;
}
void setAge(int age) {
this->age = age;
}
string getName() {
return name;
}
int getAge() {
return age;
}
};
```
在这个示例中,name 和 age 是私有成员变量,只能通过公有的 setName、setAge、getName 和 getAge 方法来访问和修改。
继承是指一个类可以继承另一个类的属性和方法,从而实现代码的复用和扩展。例如,下面是一个简单的继承示例:
```
class Student : public Person {
private:
int grade;
public:
void setGrade(int grade) {
this->grade = grade;
}
int getGrade() {
return grade;
}
};
```
在这个示例中,Student 类继承了 Person 类的属性和方法,并新增了一个 grade 成员变量和相应的 setGrade 和 getGrade 方法。
多态是指同一种操作作用于不同的对象,可以有不同的解释和实现,从而实现代码的灵活性和可扩展性。例如,下面是一个简单的多态示例:
```
class Shape {
public:
virtual double getArea() = ;
};
class Rectangle : public Shape {
private:
double width;
double height;
public:
Rectangle(double width, double height) {
this->width = width;
this->height = height;
}
double getArea() {
return width * height;
}
};
class Circle : public Shape {
private:
double radius;
public:
Circle(double radius) {
this->radius = radius;
}
double getArea() {
return 3.14 * radius * radius;
}
};
int main() {
Shape* shape1 = new Rectangle(2, 3);
Shape* shape2 = new Circle(4);
cout << "Rectangle area: " << shape1->getArea() << endl;
cout << "Circle area: " << shape2->getArea() << endl;
return ;
}
```
在这个示例中,Shape 是一个抽象类,定义了一个纯虚函数 getArea,Rectangle 和 Circle 类继承了 Shape 类,并实现了各自的 getArea 方法。在 main 函数中,通过 Shape 指针指向不同的对象,实现了对不同形状的计算面积操作。