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 实例变量 ...
随机推荐
- Spring报NoSuchBeanDefinitionException
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 上述可以看出Ac ...
- 马尔科夫随机场模型(MRF-Markov Random Field)
原文: http://blog.sina.com.cn/s/blog_92c398b00102vs3q.html 马尔科夫过程 隐马尔科夫过程 与马尔科夫相比,隐马尔可夫模型则是双重随机过程,不 ...
- [TODO]The way to Go(9): 基本类型和运算符
参考: Github: Go Github: The way to Go 基本类型和运算符 表达式是一种特定的类型的值,它可以由其它的值以及运算符组合而成. 每个类型都定义了可以和自己结合的运算符集合 ...
- UVa 1602 网格动物(回溯)
https://vjudge.net/problem/UVA-1602 题意:计算n连通块不同形态的个数. 思路: 实在是不知道该怎么做好,感觉判重实在是太麻烦了. 判重就是判断所有格子位置是否都相同 ...
- POJ 1509 Glass Beads---最小表示法
题意: T组数据,每组数据给出一个字符串,求这个字符串的最小表示发(只要求输出起始位置坐标) SAM入门题(检测板子是否正确). 将字符串S加倍丢进SAM中,然后走字符串长度次,每次贪心的沿最小的边走 ...
- xtu 1242 Yada Number 打表
Yada Number Time Limit : 2000 MS Memory Limit : 65536 KB Yada Number Problem Description: ...
- c++ 指定长度容器元素的拷贝(copy_n)
#include <iostream> // cout #include <algorithm> // copy #include <vector> ...
- jekins,报错 stderr: Could not create directory '/usr/share/tomcat7/.ssh'. Failed to add the host to the list of
public key是在~/.ssh/id_rsa.pub,而private key是~/.ssh/id_rsa 设置的时候,Jenkins需要的是private key
- Android 实现文件上传功能(upload)
文 件上传在B/S应用中是一种十分常见的功能,那么在Android平台下是否可以实现像B/S那样的文件上传功能呢?答案是肯定的.下面是一个模拟网站程 序上传文件的例子.这里只写出了Android部分的 ...
- indexedDB入门
localforage localStorage局限性:存储容量限制,仅支持字符串,如果是存对象还需要将使用JSON.stringify和JSON.parse方法互相转换:读取都是同步的.大多数情况o ...