吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2530|回复: 1
收起左侧

[C&C++ 转载] 【笔记】小论多态

[复制链接]
liptm304 发表于 2016-2-9 22:19
本帖最后由 奋斗丶小Z 于 2016-2-10 20:14 编辑

C++多态主要体现在子类父类关系。
多态进阶与重载函数。
重载函数要求参数的位置,参数的名称,参数的多少总有不同的地方,且函数同名。
在函数同名的情况下,如果函数的参数的位置,参数的名称,参数的多少都一样。
到底是打印父类的函数,还是打印子类的函数呢?
如果是打印子类,就叫覆盖或重写。可以理解为父类和子类的同名函数被子类的函数覆盖了。
可以说:在基类中定义了一个非虚拟函数,然后在派生类中又定义了一个同名同参数同返回类型的函数,这就是覆盖了。在派生类对象上直接调用这个函数名,只会调用派生类中的那个。
实际上,函数怎么选择。用虚函数处理比较简单。
如果没用虚函数。就用基类或父类中的函数。
如果用了虚函数了。就用派生类或子类中的函数。
我搜集的代码如下:
[tr]  [td=932]  
#include<iostream>
  
using namespace  std;
  
class A{//虚函数示例代码2
  
    public:
  
        virtual void fun(){cout<<"A::fun"<<endl;}
  
        virtual void fun2(){cout<<"A::fun2"<<endl;}
  
};
  
class B : public A{
  
    public:
  
        void fun(){cout<<"B::fun"<<endl;}
  
        void fun2(){cout<<"B::fun2"<<endl;}
  
};//end//虚函数示例代码2
  
int main()
  
{
  
    void(A::*fun)();//定义一个函数指针
  
    A *p=new B;
  
    fun=&A::fun;
  
    (p->*fun)();
  
    fun=&A::fun2;
  
    (p->*fun)();
  
    delete p;
  
    system("pause");
  
    return 0;
  
}
  [/td] [/tr]
误区
你能估算出结果吗?如果你估算出的结果是A::fun和A::fun2,呵呵,恭喜恭喜,你中圈套了。其实真正的结果是B::fun和B::fun2。所以呢。这里发生了覆盖。
看下面的代码。去除了虚函数virtual.答案就是A::fun和A::fun2。很正常吧?这里用虚函数实现了多态。
#include<iostream>
using namespace std;
class A{//虚函数示例代码2
    public:
        void fun(){cout<<"A::fun"<<endl;}
        void fun2(){cout<<"A::fun2"<<endl;}
};
class B : public A{
    public:
        void fun(){cout<<"B::fun"<<endl;}
        void fun2(){cout<<"B::fun2"<<endl;}
};//end//虚函数示例代码2
int main()
{
    void(A::*fun)();//定义一个函数指针
    A *p=new B;
    fun=&A::fun;
    (p->*fun)();
    fun=&A::fun2;
    (p->*fun)();
    delete p;
    system("pause");
    return 0;
}

免费评分

参与人数 2热心值 +2 收起 理由
中国法制史 + 1 我很赞同!
geeky + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Cizel 发表于 2016-2-10 20:14
代码最好是用加上代码格式~
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 13:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表