c语言编程笔录

您现在的位置是:首页 > 编程 > 编程经验

编程经验

多态性 C++中实现运行时多态的方式

admin 2023-06-15编程经验
什么是多态性多态性是指同一个指令可以作用于不同类型的对象并获得不同的结果的能力。在C++中,多态性是通过继承、虚函数、引用和指针等机制来实现运行时多态的。继承和多态性继承是一种实现代码重用和抽象的机制,它也是实现多态性的基础。我们可以在基类中定义一个虚函数,派生类中重写该函数,从而实现多态性。以下是一个简单的示例:classShape{public:virtualvoi

什么是多态性

多态性是指同一个指令可以作用于不同类型的对象并获得不同的结果的能力。在C++中,多态性是通过继承、虚函数、引用和指针等机制来实现运行时多态的。

继承和多态性

继承是一种实现代码重用和抽象的机制,它也是实现多态性的基础。我们可以在基类中定义一个虚函数,派生类中重写该函数,从而实现多态性。以下是一个简单的示例:

class Shape {

public:

virtual void Draw() {

std::cout << "Draw shape" << std::endl;

}

};

class Circle : public Shape {

public:

void Draw() {

std::cout << "Draw circle" << std::endl;

}

};

class Rectangle : public Shape {

public:

void Draw() {

std::cout << "Draw rectangle" << std::endl;

}

};

int main() {

Shape* shape1 = new Circle();

Shape* shape2 = new Rectangle();

shape1->Draw();

shape2->Draw();

delete shape1;

delete shape2;

return 0;

}

运行结果为:

Draw circle

Draw rectangle

可以看到,shape1和shape2虽然都是Shape类型的指针,但是在运行时调用Draw函数时,根据实际类型进行了不同的操作。

虚函数和多态性

虚函数是实现多态性的重要机制。在基类中定义虚函数,派生类可以继承和重写该函数。当使用基类指针或引用调用虚函数时,程序会根据对象的实际类型来调用相应的函数,从而实现多态性。

以下是一个虚函数的简单示例:

class Shape {

public:

virtual void Draw() {

std::cout << "Draw shape" << std::endl;

}

};

class Circle : public Shape {

public:

void Draw() {

std::cout << "Draw circle" << std::endl;

}

};

int main() {

Shape* shape = new Circle();

shape->Draw();

delete shape;

return 0;

}

运行结果为:

Draw circle

可以看到,当使用Shape类型指针调用Draw函数时,实际调用的是Circle类中的Draw函数,在运行时决定了函数被调用的实际类型。

指针和引用实现多态性

除了继承和虚函数,C++中的指针和引用也可以用来实现多态性。根据指针或引用的实际类型,程序会动态决定调用相应的函数。

以下是一个使用引用的简单示例:

class Shape {

public:

virtual void Draw() {

std::cout << "Draw shape" << std::endl;

}

};

class Circle : public Shape {

public:

void Draw() {

std::cout << "Draw circle" << std::endl;

}

};

void MyDraw(Shape& shape) {

shape.Draw();

}

int main() {

Circle circle;

MyDraw(circle);

return 0;

}

运行结果为:

Draw circle

可以看到,使用MyDraw函数时,实参为Circle类型对象,但是形参为Shape类型的引用,程序在运行时决定调用相应的函数,实现了多态性。