- 0
- 0
- 约2.11万字
- 约 116页
- 2026-01-30 发布于广东
- 举报
10.1定义类与对象
10.1.1定义类定义一个类,在本质上是定义一个数据类型的蓝图。实际上,类并没有定义任何数据,但它定义了类的对象包括什么,以及可以在这个对象上执行哪些操作。定义一个类,就是定义一组属性和对这组属性进行操作的函数。属性称为类的数据成员,函数称为类的成员函数。类定义以关键字class开头,后接类的名称。类的主体被包含在一对大括号{}中。类在定义后,必须接一个分号或一个声明列表。下一页返回
10.1定义类与对象
一般形式如下:class类名{private:私有成员;public:公有成员;protected:受保护成员;};在类定义中,所有数据和函数(或过程)都被封装在一起。数据封装是面向对象编程的一个重要特点,它防止外部函数直接访问类的内部成员。无论是公有成员、私有成员还是受保护成员,都既可以是数据成员,也可以是成员函数。上一页下一页返回
10.1定义类与对象
类成员的访问限制是通过在类主体内部对各个区域标记public、private、protected来指定的。关键字public、private、protected称为访问修饰符。在程序中,公有成员在类的外部是可访问的,可以不使用任何成员函数来设置和获取公有变量的值。私有成员变量(或函数)在类的外部是不可访问的,甚至是不可查看的。只有类和友元函数可以访问私有成员。默认情况下,类的所有成员都是私有的。保护成员变量(或函数)与私有成员十分相似,但是,保护成员在派生类(即子类)中是可访问的。第12章将介绍派生类和继承的知识。本章介绍公有成员和私有成员的使用。在实际操作中,一般会在私有区域定义成员数据,在公有区域定义相关的成员函数,以便在类的外部也可以调用这些函数。无须被调用的成员函数,一般会在私有区域定义。上一页下一页返回
10.1定义类与对象
结构体和类都能用于定义新的类型,格式也几乎相同。这两种方法的唯一区别在于:在结构体中,没有指明访问属性,所有成员都是公有的;在类的定义中,默认情况下,所有成员都是私有的,而且可以指定访问属性。在例10-1中,需要定义一个二维点的数据类型蓝图,将其命名为Point。如果定义一个Point类型的对象p,则此对象p必须包含横坐标和纵坐标,且横坐标值和纵坐标值不可改变。因此,在Point类定义时,应指定横坐标x和纵坐标y为成员数据,且其访问属性为private。在对象p上,可以执行哪些操作呢?题意要求计算p点与原点的距离,而距离的计算需要横坐标x和纵坐标y的值,所有横坐标x和纵坐标y的值应该怎么设置呢?上一页下一页返回
10.1定义类与对象
对此,需要至少两项操作:一项是设置p点的坐标值;另一项是计算p点与原点的距离。为了方便调试,可以增加输出坐标点、获取横坐标、获取纵坐标的操作。这几项操作需要在类Point中加以定义,作为类Point的成员函数。因此,将其访问属性设为public,使其在类的外部可以访问。完善类的定义还包括所有成员函数的实现。成员函数的实现通常有两种方法:一种方法是在类定义时只给出函数原型,而将函数的定义写在类定义外;另一种方法是将成员函数写在类定义中。为了减少时间开销,如果一个成员函数不包含循环等控制语句,那么C++编译器就会自动将其作为内置(inline)函数处理。这种类中函数称为内联函数,即在程序调用这些函数时,直接把函数代码嵌入调用点,而不执行函数的调用过程。对于类内定义的内联函数,可以省略inline;内联成员函数也可写在类定义外面,直接使用保留字inline说明即可,但必须放在同一文件中,否则无法实现函数代码嵌入。上一页下一页返回
10.1定义类与对象
类的成员函数可以重载,这种函数称为重载函数。也就是说,类中允许参数个数不同、参数类型不同的两个以上的成员函数有相同的函数名,当然,它们的定义(实现)不相同。例如,例10-1可以定义多个create函数,实现多种方式创建一个二维点。如果在类体中直接定义成员函数,则不需要在函数名前加类名。但是,如果在类体外定义成员函数,就必须在函数名外加上类名,类名和函数名之间应添加作用限定符“∷”。例如,“floatPoint∷distance()”为在类体外定义类成员函数的形式。在程序设计时,将类定义和成员函数的实现分开,可增强程序的可
原创力文档

文档评论(0)