继承
继承是指一个类(子类)从另一个类(父类)继承属性和方法。C++支持单继承和多继承。
#include <iostream>// 基类(父类)
class Animal {
public:// 基类中的方法void eat() {std::cout << "Animal is eating." << std::endl;}
};// 派生类(子类)
class Dog : public Animal {
public:// 子类中的方法void bark() {std::cout << "Dog is barking." << std::endl;}
};int main() {Dog myDog;myDog.eat(); // 调用从基类继承的方法myDog.bark(); // 调用子类自己的方法return 0;
}
在这个示例中,Dog
类继承了Animal
类,因此Dog
对象可以调用Animal
类中的eat
方法。
多态
多态是指在运行时根据对象的实际类型调用相应的方法。C++通过虚函数(virtual function)实现多态。
#include <iostream>// 基类(父类)
class Animal {
public:// 虚函数virtual void speak() {std::cout << "Animal speaks." << std::endl;}
};// 派生类(子类)
class Dog : public Animal {
public:// 重写基类中的虚函数void speak() override {std::cout << "Dog barks." << std::endl;}
};// 派生类(子类)
class Cat : public Animal {
public:// 重写基类中的虚函数void speak() override {std::cout << "Cat meows." << std::endl;}
};void makeAnimalSpeak(Animal* animal) {// 调用虚函数,实现多态animal->speak();
}int main() {Animal* myDog = new Dog();Animal* myCat = new Cat();makeAnimalSpeak(myDog); // 输出 "Dog barks."makeAnimalSpeak(myCat); // 输出 "Cat meows."delete myDog;delete myCat;return 0;
}
Animal* myDog = new Dog();
myDog->speak(); // 调用 Dog 类的 speak 方法
在这段代码中,虽然 myDog
是一个 Animal
类的指针,但它实际上指向一个 Dog
对象。当调用 speak
方法时,C++会根据对象的实际类型(即 Dog
)调用相应的方法,从而实现多态。