返回
多态的面貌,cpp中的虚拟函数与继承
后端
2024-02-02 22:44:33
当然,可以按照要求撰写一篇技术博客。
多态的概念
多态是指在面向对象编程中,对象具有多种形态,即同一操作作用在不同对象上,可能产生不同的结果。多态性是对象设计的一个重要特性,可以使程序代码更加灵活和复用。
举个栗子:
在动物世界中,猫和狗都属于动物,但它们的行为却大不相同。猫会喵喵叫,狗会汪汪叫。如果我们想编写一个程序来模拟动物的行为,我们可以使用多态性来实现。
class Animal {
public:
virtual void makeSound() {
std::cout << "Animal makes a sound." << std::endl;
}
};
class Cat : public Animal {
public:
void makeSound() override {
std::cout << "Meow!" << std::endl;
}
};
class Dog : public Animal {
public:
void makeSound() override {
std::cout << "Woof!" << std::endl;
}
};
int main() {
Animal *animal = new Cat();
animal->makeSound(); // Output: Meow!
animal = new Dog();
animal->makeSound(); // Output: Woof!
return 0;
}
在上面的代码中,我们定义了一个Animal类,它有一个makeSound()方法。Cat类和Dog类都是Animal类的子类,它们都继承了makeSound()方法。
再举个栗子:
最近为了争夺在线支付市场,支付宝年底经常会做诱人的扫红包-支付-给奖励金的活动。那么 大家想想为什么要用扫码支付呢?在这个场景里,扫码支付的多态性体现在哪里呢?扫红包会触发一个支付行为,但是支付的方式可以是红包支付,也可以是余额支付,因为不同的支付方式都继承了同一个父类支付行为。
class Payment {
public:
virtual void pay() {
std::cout << "Payment is being made." << std::endl;
}
};
class RedPacketPayment : public Payment {
public:
void pay() override {
std::cout << "RedPacket payment is being made." << std::endl;
}
};
class BalancePayment : public Payment {
public:
void pay() override {
std::cout << "Balance payment is being made." << std::endl;
}
};
int main() {
Payment *payment = new RedPacketPayment();
payment->pay(); // Output: RedPacket payment is being made.
payment = new BalancePayment();
payment->pay(); // Output: Balance payment is being made.
return 0;
}
虚拟函数与继承
在C++中,多态性是通过虚拟函数和继承来实现的。虚拟函数是一种允许子类覆盖父类方法的方法。当一个函数被声明为virtual时,它就成为一个虚拟函数。
当一个函数被声明为virtual时,它就成为一个虚拟函数。当一个子类继承一个具有虚拟函数的父类时,子类就可以覆盖父类的虚拟函数。这样,当我们通过父类指针调用虚拟函数时,实际调用的将是子类的覆盖函数。
多态性是面向对象编程的一个重要特性,可以使程序代码更加灵活和复用。通过虚拟函数和继承,我们可以在C++中轻松地实现多态性。