zoukankan      html  css  js  c++  java
  • C++类的复习

    1、C++ 类的声明:
    class class_name
    {
        private:
            /*
            *私有的数据和成员函数
            *只能被本类中的成员函数引用,类外不能调用
            *友元类例外
            */
        public:
            /*
            *公共的数据和成员函数
            *可以被本类中的成员函数引用,也可以被类的作用域内的其他函数引用
            */
        protected:
            /*
            *受保护的数据和成员函数
            *不能被类外访问,但可以被派生类的成员函数访问
            */
    };


    2、在类外定义成员函数
    void class_name::fanction_name()
    {
        //函数体
    }

    3、定义内置函数
    inline void class_name::fanction_name()
    {
        /*
        * 内置函数在正真执行时,是把函数代码嵌入到程序的调用点
        * 以减少调用成员函数的时间开销
        * 内置函数的要求:函数规模很小,调用频率较高
        */
    }


    4、定义类的对象
        class_name name_1,name_2;


    5、对象成员的引用
    (1) 通过对象名和成员运算符访问对象中的成员
        class_name name_1;
        name_1.fanction_name();

    (2)通过指向对象的指针访问对象中的成员
        class_name name_1,*p; //定义对象 name_1 和 class_name 类的指针变量 p
        p = &name_1;          //是 p 指向对象 name_1
        p->fanction_name();

    (3)通过对象的引用来访问对象中的成员
        class_name name_1;
        class_name & name_2 = name_1; //定义类的引用变量 name_2 并使之初始化为 name_1
        name_2.fanction_name();       
        /*
        *name_1 和 name_2 共同占用一段内存
        *所以 name_2.fanction_name() 就是 name_1.fanction_name()
        */


    6、构造函数
    (1)构造函数的简介:
        构造函数是用来处理对象的初始化;
        构造函数的名字必须与类名同名,不能任意命名;
        构造函数不能被用户调用,而是在建立对象时自动执行;
        构造函数不具有任何类型,不返回任何值;

    (2)构造函数在类外的定义
        //先在定义类时的 public 中声明构造函数
        class_name();
        //在在类外定义
        class_name::class_name()
        {
            /*如果用户自己没有定义构造函数,则 C++ 系统会自动生成一个构造函数,
            * 只是这个构造函数的函数体是空的,不执行初始化操作
            */
        }

    (3)带参数的构造函数
        class class_name
        {
            public:
                class_name(int,int,int); //声明带参数的构造函数
            private:
                int height;
                int width;
                int lengh;
        };

        //在类外定义带参数的构造函数
        class_name::class_name(int a,int b,int c)
        {
            height = a;
            width = b;
            lengh = c;
        }

        //定义对象并给三个成员变量赋初值
        class_name name_1(1,2,3);

    (4)构造函数的重载
        在一个类中定义多个构造函数,以便对类的对象提供不同的初始化方法,
        这些构造函数具有相同的名字,而参数的个数或参数的类型不同
        编译器根据定义对象时给对象赋值的参数去确定对应的构造函数

        //在类的定义中声明构造函数
        class_name(); //声明一个无参数的构造函数
        //声明一个有参数的构造函数,用参数的初始化表对数据成员初始化
        class_name(int a,int b,int c):height(a),width(b),lengh(c){}

        //定义对象
        class_name::name_1;  //定义对象 name_1 不指定实参,这时调用第一个构造函数
        class_name::name_2(1,2,3);//定义对象 name_2 指定实参,这时调用第二个构造函数


    7、析构函数
        //析构函数在定义类时的声明
        ~class_name();

        //在类外的定义
        class_name::~class_name()
        {
            //析构函数的作用是在撤销对象占用的内存之前完成一些清理工作
        }
        

    8、this指针
        在每一个成员函数中都包含一个特殊的指针 this ,它是指向本类对象的指针
        它的值是当前被调用的成员函数所在的对象的起始地址
        this 指针是用来区分不同对象的成员函数引用其对应的数据成员


    9、派生与继承
    (1)派生类的声明
        //声明基类是 class_name 以公用继承方式的派生类 class_name_1
        class class_name : public class_name_1
        {
            private:
                //派生类中新增的成员
            public:
        };

    (2)派生类成员的访问属性
        基类成员函数不能访问派生类的成员
        派生类的成员函数根据继承方式不同而不同:

                  公用继承
        ———————————————————————————————————
        基类成员      |    派生类中的访问属性
        ———————————————————————————————————
        私有成员      |    不可访问
        ———————————————————————————————————
        公用成员      |    公用
        ———————————————————————————————————
        保护成员      |    保护
        ———————————————————————————————————
                 私有继承
        ———————————————————————————————————
        基类成员      |    派生类中的访问属性
        ———————————————————————————————————
        私有成员      |    不可访问
        ———————————————————————————————————
        公用成员      |    私有
        ———————————————————————————————————
        保护成员      |    私有
        ———————————————————————————————————
                  保护继承
        ———————————————————————————————————
        基类成员      |    派生类中的访问属性
        ———————————————————————————————————
        私有成员      |    不可访问
        ———————————————————————————————————
        公用成员      |    保护
        ———————————————————————————————————
        保护成员      |    保护
        ———————————————————————————————————


    10、友元
    (1)友元的含义:
        在一个类中声明一个外部函数或者另一个类的成员函数
        为友元,则这个函数就可以访问这个类的私有数据

    (2)友元的声明
        //在类的定义时声明外部函数 fanction_name 为友元
        friend void fanction_name(class_name &);    
        //在 class_name 类的定义时声明 class_name_1 的成员函数 fanction_name 为友元
        friend void class_name_1::fanction_name(class_name &);

       

  • 相关阅读:
    把线程池比作装修公司
    字符串常量池
    如何理解多租户架构?
    Redis的List的删除
    MySQL Explain详解
    Lombok
    减少TIME_WAIT时间的优化配置
    MySQL Join算法与调优白皮书(一)
    MySQL Join算法与调优白皮书(二)
    MySQL Join算法与调优白皮书(三)
  • 原文地址:https://www.cnblogs.com/cxd2014/p/4627504.html
Copyright © 2011-2022 走看看