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

时间: 2024-08-14 14:52:30

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

TinyXml友员类的复习

0x00. 遇到问题 TiXmlNode 不提供节点属性查询,跟进代码查看有friend class TiXmlElement; 友员类,忘记怎么玩了╮(╯▽╰)╭. 0x01. 将代码抓取出来 class TiXmlNode : public TiXmlBase { friend class TiXmlDocument; friend class TiXmlElement; } class TiXmlElement { } A.一个段子轻松记住友元类之间的关系!(′▽′)ψ 甲愿意把甲的秘密告

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

这是前一阵<高级软件工程>课堂上,老师随堂出的一道讨论题,随手贴在这里: ps: 今天是520,正好聊一些OoXx,关于爱的扯淡话题:) 题目:"鸡生蛋,蛋孵鸡",世间万物生生不息,如何用O-O中的类图以尽可能接近现实的方式来描述? 参考答案: 解析: 1.Chicken是基类,Hen(母鸡),Cock(公鸡)从Chicken派生, 2.Hen与Egg是关联关系,注意关联关系中的"重数"表示,从Hen向Egg的方向看去,0..*表示1只母鸡,可能下&qu

【面试题】Android类应该复习的内容

1.四大组件部分 Activity的生命周期,启动方式,亲缘关系 Service的生命周期,运行进程,数据传递方式,AIDL Content Provider的应用场景,制作步骤 Broadcast Receiver的方式 2.其他: 数据存储方式:sharePreference,文件,sqlite和数据库 对象序列化方式:parcelable和serializable 四大组件的数据传递方式 Intent和参数如何赋值,其中的Flag有哪些 Handler,Looper,HandlerThre

java Io 流类详解

关于java  流类的复习:习惯性的复习按照图结构一层层往下深入去了解去复习,最后通过代码来实现感觉印象会更深刻一些: 关于 I/O流:IO可以理解为JAVA用来传递数据的管道,创建一个IO,就相当于将管道与某个数据源连接到一起了. 字节流:数据流中最小的数据单元是字节.  字节:字节是一个八位的二进制数是一个很具体的存储空间: 字符流:数据流中最小的数据单元是字符:  字符:是一个抽象的符号,例如 1.2.3 .人  等   (并不是说直接传输字符,而是将字符按照指定的编码规则,转成对应的字节

复习java基础第四天(集合)

List 代表一个元素有序.且可重复的集合,集合中的每个元素都有其对应的顺序索引 List 允许使用重复元素,可以通过索引来访问指定位置的集合元素. List 默认按元素的添加顺序设置元素的索引. List 集合里添加了一些根据索引来操作集合元素的方法: 另外: List 额外提供了一个 listIterator() 方法,该方法返回一个 ListIterator 对象, ListIterator 接口继承了 Iterator 接口,提供了专门操作 List 的方法: boolean hasPr

【转载】Android应用框架及常用工具类总结

转载自:Android应用框架 http://www.tuicool.com/articles/feqmQj 常用工具类总结    http://blog.csdn.net/krislight/article/details/11354119 一. UML类图复习: UML类图中有些标记很容易混淆,这里先复习下,请大家看下面这幅图: 注:这幅图来自<大话设计模式>这本书中的插图. 二.应用框架: A.基本概念 抽象(抽出共同之现象)——在同领域的程序中,常含有许多类别,这些类别有其共同点,我们

数组归档

动手动脑 1.[Ljava.lang.Object;@2a139a55; 之前表示的数组类型,@之后的一串数字表示的是具体地址. 应该通过下标访问数组元素 2.数组元素的引用: 引用传递数组元素时,会直接修改数组元素值,而值传递则是产生一个拷贝,并不会修改值 3.转换大写: package Ckm; import javax.swing.*; public class Daxiezhuanhuan { public static void main(String[] args) { // TOD

三月12号的 问题特别多

今天讲的内容有些多主要是类的复习以及数组的练习,都是一些比较复杂的题型的,需要多加练习才可以的 首先是关于截取的练习输入身份证号码截取生日 //输入身份证号接受生日 Console.Write("请输入你的身份证号"); string a = Console.ReadLine(); if (a.Length== 18) { string c = a.Substring(6,4); string d = a.Substring(11, 1); string e = a.Substring

Java基础笔记-多线程

线程: 方式一:继承Thread类并且复写run方法. 格式: class MyThread extends Thread { public void run() { 线程中要运行的代码. } } 其步骤为: 1.定义类继承Thread类. 2.复习run方法.---->目的是:用于存储线程中要运行的代码,将自定义的代码存储在run方法中,让线程运行. 3.调用线程的start方法 注意:不是调用run方法. 线程的名字:一般线程有默认的名字,形式为:Thread-编号,编号是从0开始标记的.