C++基类指针和派生类指针之间的转换方法讲解-创新互联
函数重载、函数隐藏、函数覆盖
创新互联是一家专注于成都网站设计、成都网站建设、外贸网站建设与策划设计,肃宁网站建设哪家好?创新互联做网站,专注于网站建设十年,网设计领域的专业建站公司;建站业务涵盖:肃宁等地区。肃宁做网站价格咨询:18980820575函数重载只会发生在同作用域中(或同一个类中),函数名称相同,但参数类型或参数个数不同。 函数重载不能通过函数的返回类型来区分,因为在函数返回之前我们并不知道函数的返回类型。
函数隐藏和函数覆盖只会发生在基类和派生类之间。
函数隐藏是指派生类中函数与基类中的函数同名,但是这个函数在基类中并没有被定义为虚函数,这种情况就是函数的隐藏。
所谓隐藏是指使用常规的调用方法,派生类对象访问这个函数时,会优先访问派生类中的这个函数,基类中的这个函数对派生类对象来说是隐藏起来的。 但是隐藏并不意味这不存在或完全不可访问。通过 b->Base::func()访问基类中被隐藏的函数。
函数覆盖特指由基类中定义的虚函数引发的一种多态现象。在某基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数,用法格式为:virtual 函数返回类型 函数名(参数表) {函数体};实现多态性,通过指向派生类的基类指针或引用,访问派生类中同名覆盖成员函数。
函数覆盖的条件:
- 1:基类中的成员函数被virtual关键字声明为虚函数;
- 2:派生类中该函数必须和基类中函数的名称、参数类型和个数等完全一致;
- 3:将派生类的对象赋给基类指针或者引用,实现多态。
函数覆盖(多态)实现了一种基类访问(不同)派生类的方法。我们把它称为基类的逆袭。
基类指针和派生类指针之间的转换
1. 基类指针指向基类对象、派生类指针指向派生类对象
这种情况是常用的,只需要通过对应类的指针直接调用对应类的功能就可以了。
#includeusing namespace std; class Father{ public: void print() { printf("Father's function!"); } }; class Son:public Father { public: void print() { printf("Son's function!"); } }; int main() { Father f1; Son s1; Father* f = &f1; Son* s = &s1; f->print(); cout< print(); }
另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
文章标题:C++基类指针和派生类指针之间的转换方法讲解-创新互联
分享URL:http://scyanting.com/article/jpiip.html