虚函数和纯虚函数,抽象类-创新互联

  1. 虚函数:

    成都创新互联成立于2013年,我们提供高端重庆网站建设公司成都网站制作成都网站设计、网站定制、成都营销网站建设微信平台小程序开发、微信公众号开发、seo优化排名服务,提供专业营销思路、内容策划、视觉设计、程序开发来完成项目落地,为石凉亭企业提供源源不断的流量和订单咨询。

    1)只有成员函数才能被声明为虚函数,静态成员函数不行,原因是静态成员函数在编译期就已经

    确定和哪个类绑定了,而虚含数是动态绑定的,在运行时才知道和哪个类绑定

    2)虚函数覆盖的版本,必须和该函数在基类中的原始版本一样,即函数名,形参名,常属性一样

    3)如果基类中的虚函数返回类类型的指针(A*)或引用(A&),那么允许子类覆盖版本返回B*或(B&)

     4)基类中的虚函数不管是在什么访控属性(public,protected,private)下,都能被子类继承(public),子

     类类名无法调用(因为虚函数不是静态的)

哪些函数可以声明为虚函数?

成员函数 0k

静态成员函数 no

全局函数 no

析构函数 ok

操作符重载函数 ok

注意:

1)多态特性除了要在基类中声明虚函数,并在子类中提供有效的覆盖外,还必须通过指针或引用来调用,才能表现出多态

2)调用虚函数的指针可以是this指针,只要它是一个指向子类对象的基类指针

3)当基类的构造函数被子类的构造函数调用时,子类对象尚未构造完成,不能说是子类类型的,它只能表现出基类类型的外观和行为,这时调用虚函数,只能被绑定倒基类的版本,无多态特性

4)当基类的析构函数在被子类的系够函数调用时,子类对象已经不再是子类类型,它只能表现出基类的外观和行为,调用此析构函数,只能被绑定倒基类版本,没有多态特性.

5)虚函数在基类中,可以实例化

2.纯虚函数

    virtual 返回类型 函数名(形参表)[const] =0;

3.抽象类

    1)一个类中包含了至少一个纯虚函数

    2)抽象类不能实例化对象

    3)如果子类没有覆盖其基类中的全部纯虚函数,那么该子类就是一个抽象类

    4)纯虚函数不管是在什么访控属性下(public,protected,private),都能被子类继承

    6)纯虚函数在基类中不能定义.

    5)虚函数也为成员函数,而不是静态成员函数,这里不再罗嗦了

4.动态绑定对性能的影响

    1)动态绑定会增加内存开销

    2)虚函数的调用会增加时间的开销

    3)虚函数不能被内联优化

//虚函数主要是用基类指针或引用来调用子类函数来形成多态                                                                                                        
#include 
class A{
    public: //这里肯定时public,不然没法通过基类指针调用字类函数
        virtual void print(void){
            std::cout << "A::print()" <

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前标题:虚函数和纯虚函数,抽象类-创新互联
新闻来源:http://azwzsj.com/article/ejjpp.html