思考题:
我们可以说,静态数据成员和静态成员函数时类的一部分,而不是对象的一部分(谭老师说的)。
那么,对于非静态成员函数来说,又是怎样的呢?
回答:
我们先来成员函数的存储方式。
我们都知道,一个类包含数据和函数。当我们实例化一个对象的时候,因为这个对象是用类定义的,那么它理所当然拥有了这个类的数据和函数。但是,一般情况下,不同的对象,他们的的数据值不同,但是函数的代码都相同。所以,为了节约存储空间(想象一下我们如果定义了100个对象,那么用100段内存空间存储相同的代码,岂不是很浪费?),我们让成员函数的代码共享。
我们把成员函数的代码存储在对象空间之外。换句话说,成员函数的代码,都不占据对象的存储空间。它会被存在其他地方。
所以类的成员函数,对于类来讲。一方面是逻辑上的“属于”,一方面是物理上的“不依赖“。
回到思考题上来,对于非静态成员函数来说,它当然是对象的一部分。(只是因为存储方式上的特殊性,容易让人误解!)
实例:
我们来举一个例子,说明,成员函数的代码没有存放在C++编译器为对象申请的内存空间中。
//////////////////////////////////////////////////////////////////////////
// author : Erin
// date : 20100721
// introduction : reveal the storing way of MemberFunction of a Class
//////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include <iostream>
using namespace std;
class Time
{
private:
int hour;
int minute;
int sec;
void setTime(int a, int b, int c)
{
hour = a;
minute = b;
sec = c;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
cout << "The Byte Number of 'Time' is :" << endl;
cout << sizeof(Time) <<endl;
return 0;
}
这是一个win32控制台工程,实现截图如下:
sizeof 方法用于求类的字节数。由此可知Time类对象(如果实例化的话)的字节数为12。已知int类对象的字节数为4,即有sizeof(int)=4。故知一个对象所占的内存空间大小只取决于该对象中数据成员所占空间,而与成员函数无关。
- 大小: 10.7 KB
分享到:
相关推荐
C++类的成员变量和成员函数 类是一种数据类型,它类似于普通的数据类型,但是又有别于普通的数据类型。类这种数据类型是一个包含成员变量和成员函数的一个集合。 类的成员变量和普通变量一样,也有数据类型和名称,...
C++中的构造函数、析构函数剖析 在C+ + 中, 构造函数是一个在构件对象的时 候调用的特殊的函数, 其目的是对对象进行初始 化工作, 从而使对象被使用之前可以处于一种合 理的状态。析构函数是在撤消对象时, 收回对象 ...
还有以下两个成员函数:一个用于初始化学生姓名、学号、性别和年龄的构造函数,一个用于输出学生信息的函数。编写一个主函数。声明一个学学生对象。然后调用成员函数在屏幕输出学生信息。 编程环境:vs2010,语言:...
//本程序定义了一个矩阵相乘的成员函数,该函数需要输入三个参数,分别是要作乘积的两个矩阵和需要一个接收乘积的矩阵 //该成员函数能够对这三个矩阵的维数进行判断,若不符合矩阵的乘法则返回错误信息 //由于本程序...
1. 从存储空间角度,虚函数对应一个指向vtable虚函数表的指针,这大家都知道...虚函数的作用在于通过父类的指针或者引用来调用它的时候能够变成调用子类的那个成员函数。而构造函数是在创建对象时自动调用的,不可能通
本书是采用面向对象的C++语言数据结构教材的学习辅导书,主要内容包括采用C++语言的类、模板、虚函数、友元、友类编写的各种主要数据存储结构的算法、基本操作成员函数、调用这些成员函数的主程序和程序运行结果以及...
第四章 存储分类符和作用域 第五章 运算符、优先级和结核性 第六章 控制结构 第七张 函数 第八章 数组 第九章 指针 第十章 结构 第十一章 类机制 第十二章 类的作用域和类成员访问 第十三章 派生类 第十四章 派生类...
7.4.3 const对象和成员函数 136 7.4.4 只读存储能力 139 7.5 可变的(volatile) 140 7.6 小结 141 7.7 练习 141 第8章 内联函数 142 8.1 预处理器的缺陷 142 8.2 内联函数 144 8.2.1 类内部的内联函数 145 8.2.2 ...
7.4.3 const对象和成员函数 136 7.4.4 只读存储能力 139 7.5 可变的(volatile) 140 7.6 小结 141 7.7 练习 141 第8章 内联函数 142 8.1 预处理器的缺陷 142 8.2 内联函数 144 8.2.1 类内部的内联函数 145 8.2.2 ...
之前大一的c++的课程设计报告,有源代码和实验报告,实验报告文字说明的...在实现过程中,需利用面向对象程序设计理论的基础知识,充分体现出C++语言关于类、继承和封装等核心概念,每一个类应包含数据成员和成员函数。
谭浩强教授,我国著名计算机教育专家。1934年生。1958年清华大学毕业。学生时代曾担任清华大学学生会主席、北京市人民代表。他是我国计算机普及和高校...8.3.4 成员函数的存储方式 8.4 对象成员的引用 8.4.1 通过对象名...
7.4.3 const对象和成员函数 136 7.4.4 只读存储能力 139 7.5 可变的(volatile) 140 7.6 小结 141 7.7 练习 141 第8章 内联函数 142 8.1 预处理器的缺陷 142 8.2 内联函数 144 8.2.1 类内部的内联函数 145 8.2.2 ...
因此用私有数据lastDate来存储上一次余额变动的日期、私有属accumulation来存储上次计算利息以后到最近一次余额变动时按日累加的值、成员函数accumulate来计算到指定日期的账户余额按日累积值。
C++语言程序设计实验报告 C++实验报告 为了方便,把代码放在Word里面了,每次上机实验的题目代码都在。...(4) 定义一个成员函数输出多项式。(可参照-x^4-6x^3+5格式输出) (5) 定义一个成员函数计算多项式的值。
(4) 定义一个成员函数输出多项式。(可参照-x^4-6x^3+5格式输出) (5) 定义一个成员函数计算多项式的值。 (6) 写main函数测试类的功能。 (7) 采用多文件实现。 考虑:哪些成员函数可以声明为const. 第二次...
7.4.3 const对象和成员函数 136 7.4.4 只读存储能力 139 7.5 可变的(volatile) 140 7.6 小结 141 7.7 练习 141 第8章 内联函数 142 8.1 预处理器的缺陷 142 8.2 内联函数 144 8.2.1 类内部的内联函数 145 8.2.2 ...
定义一个Date 类,数据成员有year,month, day。以“年_月_日“的格式输出日期, 还提供把天加一的成员函数nextdate( ),要求能测试出如下的结果: a. 能够进入下一个月。 b. 能够进入下一个年。 c. 能显示日期。
重定义 如果在派生类中定义了一个函数原型与继承成员函数一模一样的成员函数,则该函数实现的函数体是对继承成员函数的重定义。 一般构造函数,析构函数,重载运算符函数是不能直接继承,但是可以间接调用 构造...
7.4.3 const对象和成员函数 7.4.4 只读存储能力 7.5 可变的(volatile) 7.6 小结 7.7 练习 第8章 内联函数 8.1 预处理器的缺陷 8.2 内联函数 8.2.1 类内部的内联函数 8.2.2 存取函数 8.3 内联函数和编译器 ...