首页 > 编程语言 > 详细

C++的封装、继承和多态

时间:2014-09-25 22:52:59      阅读:318      评论:0      收藏:0      [点我收藏+]

封装

C++中就表现为把一个具体的事物封装成类

封装可以隐藏细节,让代码模块化。

一个类的成员有三种访问权限:

  1. 公有:所有人均可访问
  2. 保护:只有本类和本类的派生类中的成员函数可以访问
  3. 私有:只有本类的成员函数可以访问

 

继承

可以分为单一继承和多重继承 

继承方式:public private protectedclass默认private继承,而structure默认public继承 

  1. public:父类中public还是publicprotected还是protectedprivate对子类不可见
  2. protected:父类中publicprotected都变成了protected
  3. private:父类中publicprotected都变成了private

一般析构函数会定义成虚函数,若不是的话析构时会只调用base的析构函数而不调用derived的析构

 

虚函数 & 多态性

父类的成员函数前面+virtual就变成了虚函数

 

纯虚函数就是父类只定义了虚函数而没有实现,纯虚函数必须在子类中实现,否则子类仍为虚类需要子类的子类去实现纯虚函数(也就是,哪一层子类实现的纯虚函数,哪一层的子类才可以被初始化)

纯虚函数相当于一个接口,子类必须实现这个接口才可以使用

多态性则是为了接口重用,也就是无论传递过来的是哪个子类的对象,都能调用相应的子类的函数

代码如下

#include <iostream>

using namespace std;

int main()
{
    class base{
    public:
        base(){};
        ~base(){};
        void aa(){cout<<"base"<<endl;};
    };
    
    class derived1:public base{
    public:
        void aa(){cout<<"derived1"<<endl;};
        ~derived1(){};
    };
    class derived2:public derived1{
    public:
        void aa(){cout<<"derived2"<<endl;};
    };

    base *a;
    derived1 d1;
    derived2 d2;
    a = &d1;
    a->aa();
    a = &d2;
    a->aa();
    return 0;
}

输出为

 

derived1

derived2

 

可见有了多态性,我们用子类的实例初始化基类的指针,调用的才是子类相应的函数。若把virtual去掉,那么输出就是

 

base

base

 

此时只能调用基类的相应函数

 

 

C++的封装、继承和多态

原文:http://www.cnblogs.com/JasonGu/p/3993734.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!