ad

《C++程序开发案例课堂》_了解C++的更好途径_10.3 成员函数

admin 65 2023-11-01

【摘要】 本书摘自《C++程序开发案例课堂》一书中第10章,第3节,由刘春茂、李琪编著。

10.3 成员函数

上一节介绍的例子中,每个类对象都调用了 showtime 函数。 showtime 函数称为成员函 数。成员函数:在类中说明原型,可以在类外给出函数体实现,并在函数名前使用类名加以 限定。也可以直接在类中给出函数体,形成内联成员函数。成员函数允许声明重载函数和带 默认形参值的函数。

类函数必须先在类体中作原型声明,然后在类外定义,也就是说类体的位置应在 函数定义之前,否则编译时会出错。

类中含有两种成分,即数据成员和函数成员。函数成员又称为成员函数,成员函数的定 义有以下两种方式

《C++程序开发案例课堂》_了解C++的更好途径_10.3 成员函数

(1)类声明时给出函数原型,函数体在外部定义。函数定义形式如下:

类中函数的定义的形式与普通函数的定义相似,与普通函数定义不同之处主要是某个成 员函数一定属于某一个类,不同的类有可能有相同的函数名,因此在函数名前面就需要添加 一个类名来说明是哪个类的成员函数,即添加“类名::”来说明这个类的成员函数。

(2)第二种方法是将成员函数在类的内部定义,这样的定义称为内置函数。在类的内部 直接编写函数体,称为隐式定义;如果函数仍然写在类的外部,在函数定义前面加关键字 inline, 称为显式定义。

下面用一个例子看看如何定义成员函数。

【代码剖析】

这个程序,首先定义一个 Student类,该类有3个成员变量,同时声明一个 display 成员 函数,该函数的参数为 student 结构体变量;接下来,定义成员函数,把成员变量输出。在主 程序中,初始化一个类对象stul,对stul的3个成员变量赋值,调用 stul 的 display 函数,把

stul 的每个成员变量都输出。

从结果来看,把赋值的成员变量全部输出,在类体中直接定义函数时,不需要在函数名 前面加上类名,因为函数属于哪一个类是不言而喻的。但成员函数在类外定义时,必须在函 数名前面加上类名,予以限定(qualified), “::”是作用域限定符(field qualifier), 或称作用域 运算符,用它声明函数是属于哪个类的。

如果在作用域运算符“::”的前面没有类名,或者函数名前面既无类名又无作用域运算符 “:”,例如:

:display() 或 display()

则表示 display 函数不属于任何类,这个函数不是成员函数,而是全局函数,即非成员函数的 一般普通函数。

10.4 嵌 套 类

在一个类的内部再定义另外一个类,称为嵌套类或者嵌套类型。嵌套类作为外部类的底 层实现,同时具有隐藏底层实现的作用。

虽然嵌套类是定义在外围类内部的,但是它和外部类没有相互关联的关系。嵌套类的成 员与外围类的成员互不相干,嵌套类的成员并不属于外部类。如果嵌套类与外部类相互访 问,遵循两个普通类之间相互访问的规则,两者对对方的数据成员并没有任何特权。

对于嵌套类内部的成员定义,如果不在嵌套类内部定义,则必须写到与外围类相同的作 用域内,不能将定义写到外围类中。

前面说过,之所以使用嵌套类的另一个原因是达到底层实现隐藏的目的。为了实现这种 目的,需要在另一个头文件中定义该嵌套类,而只在外围类中提前声明这个嵌套类即可。当 然,在外围类外面定义这个嵌套类时,应该使用外围类进行限定。使用时,只需要在外围类 的实现文件中包含这个头文件即可。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 [email protected] 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:《C++程序开发案例课堂》_了解C++的更好途径_4.1.5 自增和自减运算符
下一篇:《C++程序开发案例课堂》_了解C++的更好途径_10.6 类成员的访问控制
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×