码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2014-09-25 23:28:27      阅读:379      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   os   使用   strong   sp   div   

封装

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++的封装、继承和多态

标签:style   blog   color   io   os   使用   strong   sp   div   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!