- 多态性是指通过相同的接口来访问不同的实现。在C++中,多态性通常通过虚函数来实现。
例如:
class Shape {
public:
virtual void draw() { // 声明为虚函数
cout << "Drawing a shape." << endl;
}
};
class Circle : public Shape {
public:
void draw() override { // 重写draw函数
cout << "Drawing a circle." << endl;
}
};
int main() {
Shape* s = new Circle(); // 通过Shape指针调用Circle对象
s->draw(); // 执行Circle的draw函数
delete s; // 释放内存
return 0;
}
在这个示例中,我们使用虚函数实现了多态性。从Shape派生出了一个Circle类,并且在Circle类中重新定义了draw函数。然后,我们通过Shape指针来调用Circle对象,这样就可以执行Circle中的draw函数了。
- 在多态性中,基类的指针可以指向派生类的对象。这种技术称为“向上转型”(upcasting)。
例如:
class Animal {
public:
virtual void makeSound() {
cout << "Animal is making a sound." << endl;
}
};
class Dog : public Animal {
public:
void makeSound() override {
cout << "Dog is barking." << endl;
}
};
int main() {
Animal* animal = new Dog(); // 向上转型
animal->makeSound(); // 执行Dog的makeSound函数
delete animal; // 释放内存
return 0;
}
在这个示例中,我们定义了一个Animal基类和一个Dog派生类,并且在Dog类中重新定义了makeSound函数。然后,我们通过向上转型将Dog对象转换为Animal的指针,这样就可以调用Dog中的makeSound函数了。
- 纯虚函数是一种特殊的虚函数,它没有实现,在派生类中必须被重载。纯虚函数用“=0”表示。
例如:
class Shape {
public:
virtual void draw() = 0; // 声明为纯虚函数
};
class Circle : public Shape {
public:
void draw() override { // 实现draw函数
cout << "Drawing a circle." << endl;
}
};
int main() {
Shape* s = new Circle();
s->draw(); // 执行Circle的draw函数
delete s; // 释放内存
return 0;
}
在这个示例中,我们定义了一个Shape基类,其中包含一个纯虚函数draw。然后,我们从Shape派生出了一个Circle类,并且在Circle类中实现了draw函数。
希望这些知识点能够帮助你更好地学习C++多态性。
文章介绍了C++中的多态性概念,通过虚函数和纯虚函数实现。虚函数允许基类指针调用派生类的重写函数,如Shape和Circle的例子所示。纯虚函数是必须在派生类中重载的无实现函数,如在Shape基类中的draw函数。文章通过示例展示了如何使用这些机制进行面向对象编程。

被折叠的 条评论
为什么被折叠?



