• 2.2 C++类的成员变量和成员函数


    参考:http://www.weixueyuan.net/view/6334.html

    总结:

      类成员的声明和定义:

      类成员函数的定义分类内定义(内联)和类外定义(可用 inline 关键字 强制转换为内联函数)。

    类是一种数据类型,该类型类似于普通的数据类型,但是又有别于普通的数据类型。类这种数据类型是一个包含成员变量和成员函数的一个集合。下面是student类的定义。

    [例1] 类可以包含成员变量和成员函数:

    1. class student
    2. {
    3. char name[20]; //姓名
    4. int id_num; //学号
    5. int age; //年龄
    6. char sex; //性别
    7. void set_age(int a);
    8. int get_age();
    9. };

    本例声明了类student,并且在student类中声明了四个成员变量:name、id_num、age和sex。这四个成员变量用于描述student特性。除此之外我们还在类中定声明了两个函数,set_age函数和get_age函数,这两个函数是student类的成员函数,这两个函数只给出了声明,未给出定义。

    两种方法可以给出成员函数的定义:

    • 在类内部进行函数的声明和定义,此种方式我们称为inline,也即内联定义。inline是C++关键字,专门用于表示内联;
    • 在类内进行函数声明,在类外部进行函数定义。


    下面我们分别给出两种情况的示例。

    [例2] 在类内部进行函数的声明和定义:

    1. class student
    2. {
    3. char name[20]; //姓名
    4. int id_num; //学号
    5. int age; //年龄
    6. char sex; //性别
    7. void set_age(int a){age = a;}
    8. int get_age(){return age;}
    9. };

    在本例中,两个成员函数均是在类声明内部进行声明和定义的,因此这两个函数是inline类型的。

    内联函数可以通知编译器在编译阶段用成员函数set_age和get_age的函数体替换掉所有调用该函数的代码,这样替换后的代码将不会再出现对这个函数的调用的代码。通过直接的替换可以在一定程度上提高程序运行效率,通常只是用于一些简短函数。

    [例3] 在类内部声明函数,在类外部定义函数:

    1. class student
    2. {
    3. char name[20]; //姓名
    4. int id_num; //学号
    5. int age; //年龄
    6. char sex; //性别
    7. void set_age(int a);
    8. int get_age()const;
    9. };
    10. //在类外部定义set_age函数
    11. void student::set_age(int a)
    12. {
    13. age = a;
    14. }
    15. //在类外部定义get_age函数
    16. int student::get_age()const
    17. {
    18. return age;
    19. }

    本例中set_age函数和get_age函数在类声明内部仅有声明部分,而无定义部分,其函数体在类声明之外定义。本例中定义函数采用了域解析符 ::。

    在类内声明函数,如果在函数声明时使用inline关键字,如例4所示,则可以将类内声明类外定义的函数强制转换为内联函数。

    [例4] 强制转换为内联函数:

    1. class student
    2. {
    3. char name[20]; //姓名
    4. int id_num; //学号
    5. int age; //年龄
    6. char sex; //性别
    7. inline void set_age(int a);
    8. inline int get_age();
    9. };
    10. //在类外部定义set_age函数
    11. void student::set_age(int a)
    12. {
    13. age = a;
    14. }
    15. //在类外部定义get_age函数
    16. int student::get_age()
    17. {
    18. return age;
    19. }

    在例4中,student类中声明函数set_age和get_age时都使用了inline关键字,这就使得这两个函数也成为了内联函数,尽管它们是在类外进行定义函数体的。

  • 相关阅读:
    selenium加载配置参数,让chrome浏览器不出现‘Chrome正在受到自动软件的控制’的提示语,以及后台静默模式运行,不占用桌面的方法
    CentOS7使用firewalld打开关闭防火墙与端口
    LVM基本介绍与常用命令
    CentOS 7 网络配置详解
    rm删除破折号开头的文件或目录
    linux时间的查看与修改
    linux 下shell中if的“e,d,f”是什么意思
    selenium之 定位以及切换frame(iframe)
    Unix/Linux 命令速查表
    History(历史)命令用法 15 例
  • 原文地址:https://www.cnblogs.com/yongpan/p/7452275.html
Copyright © 2020-2023  润新知