hello宝子们...艾斯视觉擅长ui设计和前端开发10年+经验!努力做好每一份选择我们的信任!希望宝子们捧个人场!需要的宝子可以关注私信排期哈!致敬感谢感恩!
C++中的多态性是面向对象编程的一个重要概念,它允许使用基类的指针或引用来调用派生类对象的方法,以实现在运行时选择不同的方法实现。C++中实现多态性的主要方式是通过虚函数和继承来实现的。
在基类中声明一个虚函数,在派生类中可以重写这个虚函数。通过基类的指针或引用调用这个虚函数时,实际执行的是派生类中的重写版本。这种行为被称为动态绑定,它允许在运行时根据对象的实际类型来确定调用的是哪个函数。
class Animal {public: virtual void makeSound() { cout << "Some sound" << endl; }};class Dog : public Animal {public: void makeSound() override { cout << "Woof!" << endl; }};int main() { Animal *animal = new Dog(); animal->makeSound(); // 调用的是Dog类中的makeSound函数 delete animal; return 0;}
```
纯虚函数是在基类中声明的虚函数,但没有提供实现,而且需要在派生类中重写。包含纯虚函数的类被称为抽象类,它不能被实例化,只能作为基类来派生其他类。
class Shape {public: virtual void draw() = 0; // 纯虚函数};class Circle : public Shape {public: void draw() override { cout << "Drawing a circle" << endl; }};int main() { Shape *shape = new Circle(); shape->draw(); // 调用的是Circle类中的draw函数 delete shape; return 0;}
```
多态性使得程序可以更加灵活和可扩展,通过基类的指针或引用来操作派生类的对象,可以在运行时动态选择不同的行为,提高了代码的可维护性和可扩展性。
除了虚函数和继承之外,C++中还有另一种实现多态性的方式,即模板和泛型编程。通过模板和泛型编程,可以实现参数化多态性,使得代码可以处理多种不同类型的数据,而不需要为每种类型编写特定的函数或类。
模板函数是一种可以接受任意类型参数的函数。通过使用模板函数,可以编写一次通用的代码,即可处理多种不同类型的数据。
template <typename T>T max(T a, T b) { return (a > b) ? a : b;}int main() { cout << max(3, 5) << endl; // 输出5 cout << max(3.5, 2.7) << endl; // 输出3.5 return 0;}
```
模板类是一种可以接受任意类型参数的类。通过使用模板类,可以编写一次通用的类,即可处理多种不同类型的数据。
template <typename T>class Stack {private: vector<T> elements;public: void push(T const &element) { elements.push_back(element); } T pop() { if (elements.empty()) { throw out_of_range("Stack<>::pop(): empty stack"); } T element = elements.back(); elements.pop_back(); return element; }};int main() { Stack<int> intStack; intStack.push(1); intStack.push(2); cout << intStack.pop() << endl; // 输出2 Stack<string> stringStack; stringStack.push("Hello"); stringStack.push("World"); cout << stringStack.pop() << endl; // 输出World return 0;}
```
通过模板和泛型编程,可以实现参数化多态性,使得代码更加通用和灵活。这种多态性的实现方式与继承和虚函数的多态性有所不同,但同样有助于提高代码的可重用性和可扩展性。