多态视角下的C++编程

发表时间: 2023-11-22 11:04

hello宝子们...艾斯视觉擅长ui设计和前端开发10年+经验!努力做好每一份选择我们的信任!希望宝子们捧个人场!需要的宝子可以关注私信排期哈!致敬感谢感恩!

C++中的多态性是面向对象编程的一个重要概念,它允许使用基类的指针或引用来调用派生类对象的方法,以实现在运行时选择不同的方法实现。C++中实现多态性的主要方式是通过虚函数和继承来实现的。

1. 虚函数:

在基类中声明一个虚函数,在派生类中可以重写这个虚函数。通过基类的指针或引用调用这个虚函数时,实际执行的是派生类中的重写版本。这种行为被称为动态绑定,它允许在运行时根据对象的实际类型来确定调用的是哪个函数。

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;}

```

2. 纯虚函数和抽象类

纯虚函数是在基类中声明的虚函数,但没有提供实现,而且需要在派生类中重写。包含纯虚函数的类被称为抽象类,它不能被实例化,只能作为基类来派生其他类。

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++中还有另一种实现多态性的方式,即模板和泛型编程。通过模板和泛型编程,可以实现参数化多态性,使得代码可以处理多种不同类型的数据,而不需要为每种类型编写特定的函数或类。

3. 模板函数:

模板函数是一种可以接受任意类型参数的函数。通过使用模板函数,可以编写一次通用的代码,即可处理多种不同类型的数据。

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;}

```

4. 模板类:

模板类是一种可以接受任意类型参数的类。通过使用模板类,可以编写一次通用的类,即可处理多种不同类型的数据。

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;}

```

通过模板和泛型编程,可以实现参数化多态性,使得代码更加通用和灵活。这种多态性的实现方式与继承和虚函数的多态性有所不同,但同样有助于提高代码的可重用性和可扩展性。

宝子们有需求的可以私信对接排期哈!












宝子们有需求的可以私信对接排期哈!