📜  C++ 中的默认参数和虚函数(1)

📅  最后修改于: 2023-12-03 14:59:48.609000             🧑  作者: Mango

C++ 中的默认参数和虚函数

默认参数

在 C++ 中,函数可以有默认参数。默认参数是在函数声明的时候给定的参数,如果在调用时没有给该参数提供值,则函数将使用默认值。

void printMessage(string message, int times = 1) {
    for (int i = 0; i < times; i++) {
        cout << message << endl;
    }
}

在上面的例子中,printMessage 函数有两个参数:messagetimes。但是 times 参数有一个默认值为 1。这意味着,如果只提供了 message 参数,那么 times 参数将自动设置为 1

printMessage("Hello");      // prints "Hello" once
printMessage("Hello", 3);   // prints "Hello" three times
虚函数

在 C++ 中,虚函数是一种特殊的函数,它可以被子类重写。这意味着,当函数被调用时,将根据实际对象的类型而不是指针或引用的类型来确定要调用哪个函数。

class Animal {
    public:
        virtual void makeSound() {
            cout << "The animal makes a sound." << endl;
        }
};

class Dog : public Animal {
    public:
        void makeSound() {
            cout << "The dog barks." << endl;
        }
};

Animal* animal = new Animal();
Animal* dog = new Dog();

animal->makeSound();    // prints "The animal makes a sound."
dog->makeSound();       // prints "The dog barks."

在上面的例子中,Animal 类有一个虚函数 makeSound。子类 Dog 重写了该函数。当我们通过 animal 指针调用 makeSound 时,它将调用 AnimalmakeSound 函数。但是,当我们通过 dog 指针调用 makeSound 时,它将调用 DogmakeSound 函数。

需要注意的是,通过子类对象的引用或指针调用虚函数时,必须确保它们指向实际的子类对象。否则,将无法调用正确的函数。

// incorrect usage
Animal animal;
Dog* dog = (Dog*)&animal;
dog->makeSound();    // undefined behavior