参考: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关键字,这就使得这两个函数也成为了内联函数,尽管它们是在类外进行定义函数体的。

2.2 C++类的成员变量和成员函数的更多相关文章

  1. c/c++ 类成员变量,成员函数的存储方式,以及this指针在c++中的作用

    c/c++ 类成员变量,成员函数的存储方式,以及this指针在c++中的作用 c++不会像上图那样为每一个对象的成员变量和成员函数开辟内存空间, 而是像下图那样,只为每一个对象的成员变量开辟空间.成员 ...

  2. java面向对象---成员变量和成员函数

    //成员变量 1.类定义了对象中所具有的变量,这些变量称作成员变量 2.每个对象都有自己的变量,和同一个类的其他对象的分开的 //函数与成员变量 1.在函数中可以直接写成员变量的名字来访问成员变量,那 ...

  3. C++ 类的静态成员变量及静态成员函数

    ps:下面所说 成员=成员变量+成员函数: 作用 由于对象与对象之间的成员变量是相互独立的.所以要想共用数据,则需要使用静态成员和静态函数. 空间分配 静态成员是在程序编译时分配空间,而在程序结束时释 ...

  4. Java的初始化执行顺序(父类static变量->子类static变量->父类成员变量->父类构造器->成员变量->构造器->main函数)

    1. 引言 了解Java初始化的顺序,有助于理解Java的初始化机制和内存机制. 顺序:父类static变量->子类static变量->父类成员变量->父类构造器->成员变量- ...

  5. 成员变量和成员函数前加static的作用?

    成员变量和成员函数前加static的作用?答:它们被称为常成员变量和常成员函数,又称为类成员变量和类成员函数.分别用来反映类的状态.比如类成员变量可以用来统计类实例的数量,类成员函数负责这种统计的动作 ...

  6. 【转】C++ const成员变量和成员函数(常成员函数)

    转:http://c.biancheng.net/view/2230.html 在类中,如果你不希望某些数据被修改,可以使用const关键字加以限定.const 可以用来修饰成员变量和成员函数. co ...

  7. C++ const成员变量和成员函数(常成员函数)

    在类中,如果你不希望某些数据被修改,可以使用const关键字加以限定.const 可以用来修饰成员变量和成员函数. const成员变量 const 成员变量的用法和普通 const 变量的用法相似,只 ...

  8. [原]Unity3D深入浅出 - 常用类的成员变量和成员函数(Tranform、Time、Random、Mathf、Input)

    Transform的成员变量 Transform的成员函数 Time类,获取和时间相关的信息,可用来计算帧速率,调整时间流逝的速度等. Random类,可用来生成随机数,随机点和旋转. Mathf类提 ...

  9. python中的类的成员变量以及property函数

    1 python类的各种变量 1.1 全局变量 在类外定义的变量. 1.2 类变量 定义在类里面,所有的函数外面的变量.这个变量只有一份,是所有的对象共有的.在类外用“类.”来引用. 1.3 实例变量 ...

随机推荐

  1. HDU 4734 (数位DP)题解

    思路: dp[pos][pre]代表长度为pos的不大于pre的个数 #include<iostream> #include<cstdio> #include<cstri ...

  2. poj 2481 Cows(树状数组)题解

    Description Farmer John's cows have discovered that the clover growing along the ridge of the hill ( ...

  3. Cent OS 常用配置命令

    1.ifconfig   #查看网络接口状态 2.ifconfig –a  #查看主机所有接口的情况 3.ifconfig eth0 192.168.1.106 netmask 255.255.255 ...

  4. UVa 1220 Hali-Bula的晚会(树的最大独立集)

    https://vjudge.net/problem/UVA-1220 题意: 公司里有n个人形成一个树状结构,即除了老板以外每个员工都有唯一的直属上司.要求选尽量多的人,但不能同时选择一个人和他的直 ...

  5. nginx缓存功能的设置

    首先用的缓存是proxy_cache. 在http段里加入下列几句: [plain] view plain copy   proxy_connect_timeout 5; proxy_read_tim ...

  6. 【BZOJ】[HNOI2015]菜肴制作

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4010 要是考场上想不出,但是还是有一个分治的做法的嘛 做法就是反向连边,然后再反向输出字典 ...

  7. WPF基础学习笔记整理 (二) XAML

    基础知识: XAML:Extensible Application Markup Language, zammel: 用于实例化.NET对象的标记语言: XMAL使用树形逻辑结构描述UI: BAML: ...

  8. 简明Docker教程

    Docker基础 这篇基础文章是方便用户在使用cSphere平台之前,了解docker基础知识. 针对已经有一定的Linux基础知识的用户. Docker是什么 Docker是一个改进的容器技术.具体 ...

  9. C#中使用Log4记录日志

    具体步骤如下: 从网上下载log4net对应.net版本的dll 在C#项目中引用该dll 创建log4net对应的配置文件 在程序中使用 log4net的配置文件如下: <?xml versi ...

  10. C++数组引用

    C++数组引用 一.数组引用 C++数组的引用:引用即别名这样比指针传地址方便多了 形参中的(&a)[10]可以就看做a数组的别名,肯定要指定数组大小,如果没有后面的数组大小,天知道是变量还是 ...