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 &);

C++类的复习的更多相关文章

  1. UML:类图复习-鸡生蛋,蛋生鸡

    这是前一阵<高级软件工程>课堂上,老师随堂出的一道讨论题,随手贴在这里: ps: 今天是520,正好聊一些OoXx,关于爱的扯淡话题:) 题目:“鸡生蛋,蛋孵鸡”,世间万物生生不息,如何用 ...

  2. 反射、反射机制、类加载、Class类专题复习

    一.反射概念 1.反射机制允许程序在执行期借助于ReflectionAPI取得任何类的内部信息(比如成员变量,构造器,成员方法等等),并能操作对象的属性及方法.反射在设计模式和框架底层都会用到. 2. ...

  3. [java] 可视化日历的实现(基于Calendar类 )

    写在前面 博文安排顺序如下 1.写在前面 2.源码 3.思路 4.相关知识 该小程序是对Date类及其相关类的复习 要求如下图:实现可视化日历 实现思路 1.先从键盘输入指定格式的字符串(str)2. ...

  4. Java类的继承与多态特性-入门笔记

    相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...

  5. [Code::Blocks] Install wxWidgets & openCV

    The open source, cross platform, free C++ IDE. Code::Blocks is a free C++ IDE built to meet the most ...

  6. Java基础笔记-多线程

    线程: 方式一:继承Thread类并且复写run方法. 格式: class MyThread extends Thread { public void run() { 线程中要运行的代码. } } 其 ...

  7. CALayer & UIView 关系浅析

    原文链接:http://www.jianshu.com/p/8e6a313c158e 一.CALayer和UIView的关系 UIView显示在屏幕上归功于CALayer 可以说:UIView依赖CA ...

  8. CALayer --> UIView

    一.CALayer和UIView的关系 UIView显示在屏幕上归功于CALayer 可以说:UIView依赖CALayer,又高于CALayer 通过调用drawRect方法来渲染自身的内容,调节C ...

  9. 本人SW知识体系导航 - Programming menu

    将感悟心得记于此,重启程序员模式. js, py, c++, java, php 融汇之全栈系列 [Full-stack] 快速上手开发 - React [Full-stack] 状态管理技巧 - R ...

随机推荐

  1. 51nod 最大M子段和系列

    1052 最大M子段和 N个整数组成的序列a[1],a[2],a[3],…,a[n],将这N个数划分为互不相交的M个子段,并且这M个子段的和是最大的.如果M >= N个数中正数的个数,那么输出所 ...

  2. {CodeForces】788E New task && 汕头市队赛SRM06 D 五色战队

    D 五色战队 SRM 06 背景&&描述         游行寺家里人们的发色多种多样,有基佬紫.原谅绿.少女粉.高级黑.相簿白等.         日向彼方:吾令人观其气,气成五彩, ...

  3. swt 更新主UI线程

    // 将msg送回对应的Applet public void write(String msg) { synchronized (msg) { try { m_out.writeUTF(msg); } ...

  4. Hadoop安装过程

    1.安装JDK apt-get install openjdk-7-jdk 2.配置环境变量 vim /etc/profile 编辑: export JAVA_HOME=/usr/lib/jvm/ja ...

  5. 【bzoj3924&&luogu3345】幻想乡战略游戏

    这题可以用线段树做,不过正解恐怕是动态点分治?(点分树) 简单介绍下动态点分治的概念:在点分治的过程中,一般我们面对的问题都是静态的.如果涉及到修改这类的操作,我们就希望找到我们是如何处理到当前的修改 ...

  6. maven修改本地仓库默认路径问题

    找到maven本地路径的settings.xml文件,如D:\Program Files\apache-maven-3.0.5\conf\settings.xml: 在settings.xml文件中增 ...

  7. 1.flask视图和URL

    1.第一个flask程序 from flask import Flask ''' Flask这个类是项目的核心,以后很多操作都是基于这个类的对象 注册URL等等,都是基于这个类 ''' app = F ...

  8. 《Java编程思想》笔记 第二章 一切都是对象

    1.对象存储位置 对象的引用存在栈中,对象存在堆中.new 出来的对象都在堆中存储.栈的存取速度较快. 所有局部变量都放在栈内存里,不管是基本类型变量还是引用类型变量,都存储在各自的方法栈中: 但是引 ...

  9. 剑指offer 面试题5 : 从尾到头打印链表

    题目: 输入一个链表的头结点,从尾到头反过来打印出每个节点的值.链表结点定义如下: struct ListNode { int m_nKey; ListNode* m_pNext; }; 思路: 通常 ...

  10. 工作管理 (job control)

    这个工作管理 (job control) 是用在 bash 环境下的,也就是说:『当我们登入系统取得创建的 bash shell 进程之后,在该bush下同时进行多个工作的行为管理 』. 而所有创建的 ...