C++之多态 喜欢ヅ旅行 2022-09-05 12:55 164阅读 0赞 多态指的是同一名字的事物可以完成不同的功能,可以分为编译时的多态和运行时的多态。 编译时的多态指: 函数的重载(包括运算符的重载),对重载函数的调用在编译时就能根据实参确定应该调用什么函数。 运行时的多态: 与继承、虚函数等概念有关。 当存在类的层次结构并且它们通过继承而相关时,就会发生多态性。通过虚函数进行实现。 多态性意味着对成员函数的调用将导致不同的函数执行,这取决于调用函数的对象的类型。 举个例子: #include <iostream> using namespace std; //基类People class People{ public: People(char *name, int age); void display(); protected: char *m_name; int m_age; }; People::People(char *name, int age): m_name(name), m_age(age){ } void People::display(){ cout<<m_name<<"今年"<<m_age<<"岁了,是个无业游民。"<<endl; } //派生类Teacher class Teacher: public People{ public: Teacher(char *name, int age, int salary); void display(); private: int m_salary; }; Teacher::Teacher(char *name, int age, int salary): People(name, age), m_salary(salary){ } void Teacher::display(){ cout<<m_name<<"今年"<<m_age<<"岁了,是一名教师,每月有"<<m_salary<<"元的收入。"<<endl; } int main(){ People *p = new People("王志刚", 23); p -> display(); p = new Teacher("赵宏佳", 45, 8200); p -> display(); return 0; } /* 运行结果: 王志刚今年23岁了,是个无业游民。 赵宏佳今年45岁了,是个无业游民。 */ 通过基类指针只能访问派生类的成员变量,但是不能访问派生类的成员函数。 而如果将display()声明为虚函数: #include <iostream> using namespace std; //基类People class People{ public: People(char *name, int age); virtual void display(); //声明为虚函数 protected: char *m_name; int m_age; }; People::People(char *name, int age): m_name(name), m_age(age){ } void People::display(){ cout<<m_name<<"今年"<<m_age<<"岁了,是个无业游民。"<<endl; } //派生类Teacher class Teacher: public People{ public: Teacher(char *name, int age, int salary); virtual void display(); //声明为虚函数 private: int m_salary; }; Teacher::Teacher(char *name, int age, int salary): People(name, age), m_salary(salary){ } void Teacher::display(){ cout<<m_name<<"今年"<<m_age<<"岁了,是一名教师,每月有"<<m_salary<<"元的收入。"<<endl; } int main(){ People *p = new People("王志刚", 23); p -> display(); p = new Teacher("赵宏佳", 45, 8200); p -> display(); return 0; } /* 运行结果: 王志刚今年23岁了,是个无业游民。 赵宏佳今年45岁了,是一名教师,每月有8200元的收入。 */ 有了虚函数,**基类指针指向基类对象时就使用基类的成员(包括成员函数和成员变量),指向派生类对象时就使用派生类的成员**。换句话说,基类指针可以按照基类的方式来做事,也可以按照派生类的方式来做事,它有多种形态,或者说有多种表现方式,我们将这种现象称为**多态**(Polymorphism)。 C++提供多态的目的是:可以通过基类指针对所有派生类(包括直接派生和间接派生)的成员变量和成员函数进行“全方位”的访问,尤其是成员函数。如果没有多态,我们只能访问成员变量。在面向对象的程序设计中使用多态,能够增强程序的可扩充性,即程序需要修改或增加功能的时候,需要改动和增加的代码较少。 当派生类比较多时,如果不使用多态,那么就需要定义多个指针变量,很容易造成混乱;而有了多态,只需要一个指针变量 p 就可以调用所有派生类的虚函数。
相关 c++多态 class Parent \{ public: virtual void fun() \{ cout << "Parent" << endl; \} 怼烎@/ 2024年02月17日 20:52/ 0 赞/ 80 阅读
相关 C++ 多态 C++ 多态 一、多态性 1、多态性的定义 2、多态性的分类及实现方式 3、动态多态的作用 4、虚函数的注意事 拼搏现实的明天。/ 2023年07月24日 08:03/ 0 赞/ 34 阅读
相关 C++多态 [浅谈C++多态性][C] [虚函数和纯虚函数的区别][Link 1] [虚函数][Link 2] [C++虚函 我就是我/ 2022年09月24日 12:25/ 0 赞/ 236 阅读
相关 C++之多态 多态指的是同一名字的事物可以完成不同的功能,可以分为编译时的多态和运行时的多态。 编译时的多态指: 函数的重载(包括运算符的重载),对重载函数的调用在编译时就能根据实参确 喜欢ヅ旅行/ 2022年09月05日 12:55/ 0 赞/ 165 阅读
相关 【C#】 多态 多态是面向对象编程中三大机制之一,其原理建立在"从父类继承而来的子类可以转换为其父类"这个规则之上,换句话说,能用父类的地方,就能用该类的子类.当从父类派生了很多子 深碍√TFBOYSˉ_/ 2022年08月18日 15:24/ 0 赞/ 187 阅读
相关 C++多态 多态意思是”多种形态“。多态性是面向对象编程的关键思想。 C++通过以下方式支持多态 (1)经由一组隐式的转化操作。例如把一个派生类的指针转化为一个指向公共基类的指针 £神魔★判官ぃ/ 2022年08月06日 01:17/ 0 赞/ 248 阅读
相关 【c++】多态 多态 多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。 C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执 男娘i/ 2022年07月11日 13:13/ 0 赞/ 225 阅读
相关 C#(多态) 1: 在C\语言中,重载和重写的区别 (1)重写: 重写是子类的方法覆盖父类的方法,要求方法名和参数都相同 (2)重载:重载是在同一个类中的 偏执的太偏执、/ 2021年12月11日 03:11/ 0 赞/ 274 阅读
相关 C++多态 C++多态 多态概念 字面意思,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。 举个例子:假如你要去看电影,有的影院也许有这样的规定 我不是女神ヾ/ 2021年11月27日 06:52/ 0 赞/ 354 阅读
还没有评论,来说两句吧...