📅  最后修改于: 2023-12-03 14:59:48.609000             🧑  作者: Mango
在 C++ 中,函数可以有默认参数。默认参数是在函数声明的时候给定的参数,如果在调用时没有给该参数提供值,则函数将使用默认值。
void printMessage(string message, int times = 1) {
for (int i = 0; i < times; i++) {
cout << message << endl;
}
}
在上面的例子中,printMessage
函数有两个参数:message
和 times
。但是 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
时,它将调用 Animal
的 makeSound
函数。但是,当我们通过 dog
指针调用 makeSound
时,它将调用 Dog
的 makeSound
函数。
需要注意的是,通过子类对象的引用或指针调用虚函数时,必须确保它们指向实际的子类对象。否则,将无法调用正确的函数。
// incorrect usage
Animal animal;
Dog* dog = (Dog*)&animal;
dog->makeSound(); // undefined behavior