- 多态性是指通过相同的接口来访问不同的实现。在C++中,多态性通常通过虚函数来实现。
例如:
class Shape {
public:
virtual void draw() { // 声明为虚函数
cout << "Drawing a shape." << endl;
}
};
class Circle : public Shape {
public:
void draw() override { // 重写draw函数
cout << "Drawing a circle." << endl;
}
};
int main() {
Shape* s = new Circle(); // 通过Shape指针调用Circle对象
s->draw(); // 执行Circle的draw函数
delete s; // 释放内存
return 0;
}
在这个示例中,我们使用虚函数实现了多态性。从Shape派生出了一个Circle类,并且在Circle类中重新定义了draw函数。然后,我们通过Shape指针来调用Circle对象,这样就可以执行Circle中的draw函数了。
- 在多态性中,基类的指针可以指向派生类的对象。这种技术称为“向上转型”(upcasting)。
例如:
class Animal {
public:
virtual void makeSound() {
cout << "Animal is making a sound." << endl;
}
};
class Dog : public Animal {
public:
void makeSound() override {
cout << "Dog is barking." << endl;
}
};
int main() {
Animal* animal = new Dog(); // 向上转型
animal->makeSound(); // 执行Dog的makeSound函数
delete animal; // 释放内存
return 0;
}
在这个示例中,我们定义了一个Animal基类和一个Dog派生类,并且在Dog类中重新定义了makeSound函数。然后,我们通过向上转型将Dog对象转换为Animal的指针,这样就可以调用Dog中的makeSound函数了。
- 纯虚函数是一种特殊的虚函数,它没有实现,在派生类中必须被重载。纯虚函数用“=0”表示。
例如:
class Shape {
public:
virtual void draw() = 0; // 声明为纯虚函数
};
class Circle : public Shape {
public:
void draw() override { // 实现draw函数
cout << "Drawing a circle." << endl;
}
};
int main() {
Shape* s = new Circle();
s->draw(); // 执行Circle的draw函数
delete s; // 释放内存
return 0;
}
在这个示例中,我们定义了一个Shape基类,其中包含一个纯虚函数draw。然后,我们从Shape派生出了一个Circle类,并且在Circle类中实现了draw函数。
希望这些知识点能够帮助你更好地学习C++多态性。