美文网首页C++
C++ 之封装篇(上)

C++ 之封装篇(上)

作者: hellobinbin | 来源:发表于2018-01-29 10:43 被阅读0次

    1、前言

    C++的三大特性:封装、继承、多态

    封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。

    参考学习资料:慕课网 james_yuan 的C++远征系列 之C++远征之 封装篇 。

    2、封装概述

    数据成员&成员函数

    构造函数&析构函数

    对象赋值&对象复制

    对象数组&对象指针

    this指针

    3、封装之路

    1、类和对象

    类的定义:数据成员、成员函数。

    类的访问限定符:

    public:公共的

    protected:受保护的

    private:私有的

    类的实例化:

    //从栈中实例化

    clss Teacher{

    pubilc:

    string m_strName;

    string m_strGender;

    int m_iAge;

    void teach();

    };

    int main(void){

    Teacher tea;  //实例化一个对象

    Teacher tea[20];   //实例化一个数组

    tea.m_strName = "zhangsan";    //对象成员的访问

    // 数组对象成员的访问用for循环

    tea.teach();

    return 0;

    }

    //从堆中实例化

    int main(){

    Teacher *p = new tea();

    Teacher *q = new tea[10];

    // to do

    p->m_strName = "zhangsan";      //对象成员的访问

    p->teach();

    delete p;    //释放内存

    delete []q;

    return 0;

    }

    2、数据的封装

    封装的好处:能够对数据进行判断,数据的读写控制。

    只读属性只写get函数

    class Student{

    public:

            void setAge(ing age){

                m_iAge = age;

            }

            int getAge(){

            return m_iAge;

            }

    }

    private:

        string m_strName;

        string m_strGender;

        int m_iAge;

    };

    int main(void){

        Student stu;

        stu.m_strName("zhangsan");

        stu.m_strGender("男");

        int m_iAge = 10;

        cout << getName() << "," << getGender() << endl;

        return 0;

    }

    3、类外定义

    前面提到内联函数效率但逻辑简单不能使用for、while循环。

    clss Student{

        pubilc:

        inline void setName(string name){

            m_strName = name;

        }

        private:

        string m_strName;

    };

    类外定义分为同文件类外定义、分文件类外定义。

    1、定义类

    class Student{

        pubilc:

            void source();

            void study();

        private:

            string m_strName;

            int m_iAge;

    };

    2、成员函数

    void Student::source(){     //需要声明是那个类的成员函数

    // to do

    }

      void Student::study(){

    // to do

    }

    同文件定义:将1、2写在同一个文件里面

    分文件定义:

    1命名为Student.h    

    2命名为Student.cpp 同时将Student.h包含到头文件里面:#include<Student.h>

    分文件定义是我们经常使用的一种定义方法

    4、构造函数

    内存分区

    栈区:定义变量,由系统进行控制。

    堆区:new申请内存,使用完需要用delete删除,再用赋值语句NULL设置为空值。

    全局区:存储全局变量及静态变量。

    常量区:字符串和常量。

    代码区:存储编译后的二进制代码。

    对象初始化

    1.有且仅有一次

    2.根据条件初始化

    规则和特点

    构造函数在对象实例化的时候被自动调用

    构造函数与类同名

    构造函数没有返回值

    构造函数可以有多个重载形式

    实例化对象时仅用到一个构造函数

    当用户没有定义构造函数时编译器自动生成一个构造函数

    //无参构造函数

    class Student{

        pubilc:

        Student(){m_strName="Jim";}

        private:

        string m_strName;

    };

    //有参构造函数

    //默认构造函数

    Student(string name){m_strName = name;}

    初始化列表

    class Student {

    pubilc:

        Student(): m_strName("Jim"), m_iAge(10){}        //初始化列表

    private:

        string m_strName;

        int m_iAge;

    }

    特点

    1.初始化列表只用于构造函数

    2.先于构造函数执行

    3.可以同时初始化多个成员函数

    5、析构函数

    归还系统的资源

    定义析构函数:    ~类名()

    不允许加任何参数!

    特点:

    如果没有定义一个,系统会自动产生一个。

    没有返回值

    不能重载

    在对象销毁时自动调用

    对象的生命历程 

    申请内存     >初始化列表     >构造函数     >参与运算     >析构函数     >释放内存

    6、附总结图

    相关文章

      网友评论

        本文标题:C++ 之封装篇(上)

        本文链接:https://www.haomeiwen.com/subject/qnuvaxtx.html