C++函数指针
37行代码展示C++函数指针使用方法。
当某些内存实体的行为在编译时未知,在运行时需要按照实际状况选择调用哪种方法。最常见的方法是使用IF语句来判断。
但是当行为是在初始化时确定,且后续不再变化,频繁的IF调用就显得冗余。此时可以使用函数指针。
#include <iostream>
#include <vector>
class Pet {
public:
Pet(std::string name) {
if (name == "dog") {
this->speak = &Pet::bark;
} else if (name == "cat") {
this->speak = &Pet::meow;
}
};
void make_noice(std::string name) { (this->*speak)(name); }
private:
// What the pet say?
void (Pet::*speak)(std::string name){nullptr};
// What the dog say?
void bark(std::string name) { std::cout << "Woof! " << name << std::endl; }
// What the cat say?
void meow(std::string name) { std::cout << "Meow! " << name << std::endl; }
};
int main(int, char **) {
std::vector<std::string> week{"Monday", "Tuesday", "Wednesday", "Thursday",
"Friday", "Saturday", "Sunday"};
auto cat = Pet("cat");
for (auto day : week) {
cat.make_noice(day);
}
return 0;
}