当前位置:首页 C++ > 正文

c++多态,虚函数,纯虚函数

作者:野牛程序员:2023-07-15 10:55:31 C++阅读 2755

在C++中,多态是一种面向对象编程的特性,它允许使用基类的指针或引用来调用派生类的特定函数。多态的实现依赖于虚函数和纯虚函数。

虚函数(Virtual Function)是在基类中声明的函数,可以在派生类中重写。使用虚函数可以实现运行时多态性,即在程序运行时根据实际对象的类型来调用适当的函数实现。通过在基类中使用virtual关键字声明函数为虚函数,可以告诉编译器在运行时动态绑定函数的调用。

以下是一个示例:

class Shape {
public:
    virtual void draw() {
        cout << "Drawing a shape." << endl;
    }
};

class Circle : public Shape {
public:
    void draw() {
        cout << "Drawing a circle." << endl;
    }
};

class Square : public Shape {
public:
    void draw() {
        cout << "Drawing a square." << endl;
    }
};

int main() {
    Shape* shapePtr;
    Circle circle;
    Square square;

    shapePtr = &circle;
    shapePtr->draw();  // 调用派生类 Circle 的 draw 函数

    shapePtr = &square;
    shapePtr->draw();  // 调用派生类 Square 的 draw 函数

    return 0;
}

上述代码中,Shape 类中的 draw() 函数被声明为虚函数。派生类 CircleSquare 分别重写了 draw() 函数。在 main() 函数中,通过基类指针 shapePtr 指向派生类对象,并调用 draw() 函数。由于 draw() 函数是虚函数,实际调用的函数取决于指针所指向的对象类型,因此会调用适当的派生类函数。

纯虚函数(Pure Virtual Function)是在基类中声明的没有实现的虚函数。它用于将基类定义为抽象类,抽象类不能直接创建对象,只能用作其他类的基类。派生类必须实现纯虚函数才能成为具体类。

以下是一个示例:

class Animal {
public:
    virtual void makeSound() = 0;  // 纯虚函数
};

class Cat : public Animal {
public:
    void makeSound() {
        cout << "Meow!" << endl;
    }
};

class Dog : public Animal {
public:
    void makeSound() {
        cout << "Woof!" << endl;
    }
};

int main() {
    Animal* animalPtr;
    Cat cat;
    Dog dog;

    animalPtr = &cat;
    animalPtr->makeSound();  // 调用派生类 Cat 的 makeSound 函数

    animalPtr = &dog;
    animalPtr->makeSound();  // 调用派生类 Dog 的 makeSound 函数

    return 0;
}

在上述代码中,Animal 类中的 makeSound() 函数被声明为纯虚函数,因此 Animal 类是抽象类。派生类 CatDog 实现了纯虚函数。在 main() 函数中,通过基类指针 animalPtr 指向派生类对象,并调用 makeSound() 函数。由于纯虚函数的存在,派生类必须提供自己的实现,从而使派生类成为具体类。

需要注意的是,包含纯虚函数的类是抽象类,不能直接创建对象。可以通过指针或引用使用抽象类,并且通常用作其他类的基类,以实现多态性。


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击