怎么自己电脑做网站服务器,ps网站建设设计,广告设计公司 上海,响应式门户网站模板下载文章目录 前言一、什么是多态二、如何实现多态三、代码讲解四、静态联编#xff0c;动态联编总结 前言
在C编程中#xff0c;多态性#xff08;Polymorphism#xff09;是一种重要的概念#xff0c;它允许基于对象的实际类型来调用不同的函数。多态性提供了灵活性和可扩展… 文章目录 前言一、什么是多态二、如何实现多态三、代码讲解四、静态联编动态联编总结 前言
在C编程中多态性Polymorphism是一种重要的概念它允许基于对象的实际类型来调用不同的函数。多态性提供了灵活性和可扩展性使得代码更易于维护和扩展。 一、什么是多态
多态性的定义 多态性是一种面向对象编程的特性它允许使用基类的指针或引用来调用派生类对象的特定成员函数。多态性能够在编译时或运行时确定函数的调用从而实现不同的行为。
例如 定义一个基类的 指针 p , 基类 和 子类的都定义有 print() 函数。当 p 指向一个父类的对象时会调用父类的 print 函数当 p 指向一个 子类对象时 会调用 子类的 print 函数。如下图
注意 这里 的 两个 print 函数并不是 函数重载因为 函数重载要发生在同一个作用域内。这 属于函数重写。 二、如何实现多态
C 语言 直接支持多态的概念。
通过使用 virtual 关键字 对多态进行支持。被 virtual 声明的函数被重写后具有多态特性。被 virtual 声明的函数叫做 虚函数。
class Base {
public:virtual void display() // virtual 虚函数{cout Base class display function endl;}
};如果一个基类中有虚函数说明 它可能被继承。子类中可能重新定义了 该函数的新用法。
三、代码讲解
下面代码中 父类 和 子类中 都定义了 print 函数。当 父类指针 指向不同的对象时会根据实际的对象类型决定函数的具体目标。
class Parent // 父类 基类
{
public:virtual void print() // 虚函数{ printf(Im parent.\n);}
};class Child : public Parent // 继承 Parent 的子类
{
public:void print() //重定义 该函数的新用法{printf(Im Child\n);}
};void to_printf(Parent* p) // 参数为 父类指针用于指向 父类/子类对象
{p-print();
}int main(void)
{Parent p1;Child c1;to_printf(p1); //指向 父类对象调用父类的 print 函数to_printf(c1); //指向 子类对象调用子类的 print 函数return 0;
}当调用 print 函数时 同样的调用语句 在实际运行时有多种不同的表现形态体现了多态性。
注意 如果没有 加上 关键字 virtual ,则两次都会调用 父类的函数。因为 编译器不知道指针 p 究竟指向了什么为了更安全编译器就直接调用了父类的函数赋值兼容性。
四、静态联编动态联编
理论的概念
静态联编: 在程序的编译期间就能确定具体的函数调用。
如 函数重载。
动态联编: 在程序运行后才能确定具体的函数调用。
如函数重写。 总结
多态性 是 C 编程中一个重要且强大的概念。通过使用虚函数和函数重写我们可以实现多态性从而提高代码的可维护性、可扩展性和灵活性。在编写代码时我们应该充分利用多态性的优势并遵循良好的面向对象设计原则来正确使用多态性。