2.2 C++类的成员变量和成员函数
参考:http://www.weixueyuan.net/view/6334.html
总结:
类成员的声明和定义:
类成员函数的定义分类内定义(内联)和类外定义(可用 inline 关键字 强制转换为内联函数)。
类是一种数据类型,该类型类似于普通的数据类型,但是又有别于普通的数据类型。类这种数据类型是一个包含成员变量和成员函数的一个集合。下面是student类的定义。
[例1] 类可以包含成员变量和成员函数:
- class student
- {
- char name[20]; //姓名
- int id_num; //学号
- int age; //年龄
- char sex; //性别
- void set_age(int a);
- int get_age();
- };
本例声明了类student,并且在student类中声明了四个成员变量:name、id_num、age和sex。这四个成员变量用于描述student特性。除此之外我们还在类中定声明了两个函数,set_age函数和get_age函数,这两个函数是student类的成员函数,这两个函数只给出了声明,未给出定义。
有两种方法可以给出成员函数的定义:
- 在类内部进行函数的声明和定义,此种方式我们称为inline,也即内联定义。inline是C++关键字,专门用于表示内联;
- 在类内进行函数声明,在类外部进行函数定义。
下面我们分别给出两种情况的示例。
[例2] 在类内部进行函数的声明和定义:
- class student
- {
- char name[20]; //姓名
- int id_num; //学号
- int age; //年龄
- char sex; //性别
- void set_age(int a){age = a;}
- int get_age(){return age;}
- };
在本例中,两个成员函数均是在类声明内部进行声明和定义的,因此这两个函数是inline类型的。
内联函数可以通知编译器在编译阶段用成员函数set_age和get_age的函数体替换掉所有调用该函数的代码,这样替换后的代码将不会再出现对这个函数的调用的代码。通过直接的替换可以在一定程度上提高程序运行效率,通常只是用于一些简短函数。
[例3] 在类内部声明函数,在类外部定义函数:
- class student
- {
- char name[20]; //姓名
- int id_num; //学号
- int age; //年龄
- char sex; //性别
- void set_age(int a);
- int get_age()const;
- };
- //在类外部定义set_age函数
- void student::set_age(int a)
- {
- age = a;
- }
- //在类外部定义get_age函数
- int student::get_age()const
- {
- return age;
- }
本例中set_age函数和get_age函数在类声明内部仅有声明部分,而无定义部分,其函数体在类声明之外定义。本例中定义函数采用了域解析符 ::。
在类内声明函数,如果在函数声明时使用inline关键字,如例4所示,则可以将类内声明类外定义的函数强制转换为内联函数。
[例4] 强制转换为内联函数:
- class student
- {
- char name[20]; //姓名
- int id_num; //学号
- int age; //年龄
- char sex; //性别
- inline void set_age(int a);
- inline int get_age();
- };
- //在类外部定义set_age函数
- void student::set_age(int a)
- {
- age = a;
- }
- //在类外部定义get_age函数
- int student::get_age()
- {
- return age;
- }
在例4中,student类中声明函数set_age和get_age时都使用了inline关键字,这就使得这两个函数也成为了内联函数,尽管它们是在类外进行定义函数体的。
2.2 C++类的成员变量和成员函数的更多相关文章
- c/c++ 类成员变量,成员函数的存储方式,以及this指针在c++中的作用
c/c++ 类成员变量,成员函数的存储方式,以及this指针在c++中的作用 c++不会像上图那样为每一个对象的成员变量和成员函数开辟内存空间, 而是像下图那样,只为每一个对象的成员变量开辟空间.成员 ...
- java面向对象---成员变量和成员函数
//成员变量 1.类定义了对象中所具有的变量,这些变量称作成员变量 2.每个对象都有自己的变量,和同一个类的其他对象的分开的 //函数与成员变量 1.在函数中可以直接写成员变量的名字来访问成员变量,那 ...
- C++ 类的静态成员变量及静态成员函数
ps:下面所说 成员=成员变量+成员函数: 作用 由于对象与对象之间的成员变量是相互独立的.所以要想共用数据,则需要使用静态成员和静态函数. 空间分配 静态成员是在程序编译时分配空间,而在程序结束时释 ...
- Java的初始化执行顺序(父类static变量->子类static变量->父类成员变量->父类构造器->成员变量->构造器->main函数)
1. 引言 了解Java初始化的顺序,有助于理解Java的初始化机制和内存机制. 顺序:父类static变量->子类static变量->父类成员变量->父类构造器->成员变量- ...
- 成员变量和成员函数前加static的作用?
成员变量和成员函数前加static的作用?答:它们被称为常成员变量和常成员函数,又称为类成员变量和类成员函数.分别用来反映类的状态.比如类成员变量可以用来统计类实例的数量,类成员函数负责这种统计的动作 ...
- 【转】C++ const成员变量和成员函数(常成员函数)
转:http://c.biancheng.net/view/2230.html 在类中,如果你不希望某些数据被修改,可以使用const关键字加以限定.const 可以用来修饰成员变量和成员函数. co ...
- C++ const成员变量和成员函数(常成员函数)
在类中,如果你不希望某些数据被修改,可以使用const关键字加以限定.const 可以用来修饰成员变量和成员函数. const成员变量 const 成员变量的用法和普通 const 变量的用法相似,只 ...
- [原]Unity3D深入浅出 - 常用类的成员变量和成员函数(Tranform、Time、Random、Mathf、Input)
Transform的成员变量 Transform的成员函数 Time类,获取和时间相关的信息,可用来计算帧速率,调整时间流逝的速度等. Random类,可用来生成随机数,随机点和旋转. Mathf类提 ...
- python中的类的成员变量以及property函数
1 python类的各种变量 1.1 全局变量 在类外定义的变量. 1.2 类变量 定义在类里面,所有的函数外面的变量.这个变量只有一份,是所有的对象共有的.在类外用“类.”来引用. 1.3 实例变量 ...
随机推荐
- 在线js编程网站 精品版
https://jsfiddle.net/ 引自:http://www.ykmimi.com/tools.html
- spark-shuffle分析
前言 shuffle是分布式计算系统中最重要的一部分,spark和mapreduce的shuffle的大体思路类似,在实现上有一些区分.Spark提供了插件式的接口,使用者可以通过继承ShuffleM ...
- C++小结:迟到的小结和重新起航的故事
迟到的小结和重新起航的故事 有关这个学期的故事,随着这个学期的结束也划上了一个句号. 正如之前博客里面(还是空间里面)提到的,在这个过程中的收获比最后考试的结果更重要. 就像这次的计算器,也许会对最后 ...
- [异常记录-12]Web Deploy部署:未能连接到远程计算机,请确保在远程计算机上安装了 Web Deploy 并启动了所需的进程("Web Management Service")
Web Deploy 安装 请参考:图文详解远程部署ASP.NET MVC 5项目 如此安装后还不行, 可以在卸载后重新安装 Web Deploy 时,不要选那个经典还是典型的安装选项,选自定义安装 ...
- ZOJ 3869 Ace of Aces
There is a mysterious organization called Time-Space Administrative Bureau (TSAB) in the deep univer ...
- Cocos2d-x学习笔记(二)AppDelegate类详解
由源代码,可得到如下的类继承关系: 1. 在方法applicationDidFinishLaunching中,首先会调用CCDirector* pDirector = CCDirector::shar ...
- testNG 学习笔记 Day 3 常用的断言
TestNG中最常用的一个断言类是Assert.java,里面有多个静态方法,这个类我们习惯叫硬断言.对应的还有一个软断言的类,叫SoftAssert.java,这个类是需要创建实例对象,才能调用相关 ...
- Index.cshtml”处的视图必须派生自 WebViewPage 或 WebViewPage<TModel>。
解决方案: 1,在每个视图上面添加 @inherits System.Web.Mvc.WebViewPage 2,将views中的web.config COPY到新的视图模版文件夹下,就可以了
- windows与kali双系统安装基本教程
以前写过一篇在虚拟机中安装kali的基本教程的文章,那时候的kali还是1.0时代,现如今已经kali2.0了,在虚拟机中运行kali还是会受到性能的影响,所以还是装到自己电脑上跑起来最爽.当然如果你 ...
- Codeforces 285C - Building Permutation
285C - Building Permutation 思路:贪心.因为每个数都不同且不超过n,而且长度也为n,所有排列只能为1 2 3 ......n.所以排好序后与对应元素的差值的绝对值加起来就是 ...