C++初学者指南 第八篇(2)
来源:互联网 发布:数据库维护工程师 编辑:程序博客网 时间:2024/04/30 16:19
必备技能8.2:定义类并创建对象
我们将通过编写一个来学习类的用法。该类封装了与车辆相关的信息,例如,轿车、货车和汽车。这个类名称为Vehicle,它将包含和车辆相关的三个信息:载客量,可承载的油量以及每加仑油能跑的英里数。
这个类的最初版本如下。其中定义了三个实例变量:passengers,fuelcap和mpg。请注意,其中没有任何的函数。所以,它是一个只含有数据的类。
class Vehicle{public: int passengers; //可以乘坐乘客的人数 int fuelcap; //可以承载的油量,加仑 int mpg; //每加仑油能跑的英里数};
它给我们展示了声明实例变量的方式。声明实例变量的通用形式如下:
类型 变量名称;
其中的类型指明了变量的类型;变量名称就是变量的名字。可见,实例变量的声明和其它变量的声明是一样。针对Vehicle这个类来说,它的实例变量前面有public关键字。正如我们在前面解释过的那样,这就使得我们在Vehicle类之外也是可以访问这三个实例变量的。
一个类的定义就创建了一种新的数据类型。针对上面的类,这个新的数据类型就是Vehicle。我们可以使用这个名称来创建Vehicle类型的对象。因此,每个Vehicle类型的对象都将含有三个实例变量的副本:passangers,fuelcap,mpg。访问这些实例变量的时候我们需要使用点号(.)运算符。点号运算符把对象的名称和成员的名称连接起来。点号运算符的通用形似如下:
对象.成员
因此,对象是在点号的左侧的,成员是在点号的右侧的。例如,给对象minivan的fuelcap成员赋值为16,代码如下:
minivan.fuelcap=16;
一般情况下,我们可以使用点号运算符来访问实例变量和函数。下面是使用Vehicle类的完整程序:
#include <iostream>using namespace std;class Vehicle{public: int passengers; //可以乘坐乘客的人数 int fuelcap; //可以承载的油量,加仑 int mpg; //每加仑油能跑的英里数}; int main(){ Vehicle minivan; //创建一个Vehicle类型的对象 int range; //给minivan的字段赋值,注意我们使用点号来访问对象的成员 minivan.passengers = 7; minivan.fuelcap = 16; minivan.mpg = 21; range = minivan.fuelcap * minivan.mpg; cout << "Minivan can carry " << minivan.passengers << " with a range of " << range << "\n"; return 0;}
运行上面的程序,输出结果如下:
Minivan can carry 7 with a range of 336
在我们继续学习之前,我们复习一个重要的原则:每一个对象是含有一份类中定义的实例变量的拷贝。因而,一个对象的变量的内容是可以和另外的对象的变量的内容不一样的。除了是相同类型的对象之外,这两个对象之间没有任何别的联系。例如,有两Vehicle的对象,每一个都含有passengers,fuelcap和mpg的拷贝,它们的值也可以完全不一样。下面的程序就演示了这种情况:
#include <iostream>using namespace std;class Vehicle{public: int passengers; //可以乘坐乘客的人数 int fuelcap; //可以承载的油量,加仑 int mpg; //每加仑油能跑的英里数}; int main(){ //创建两个对象,每个对象都含有自己的实例变量的拷贝 Vehicle minivan; //创建一个Vehicle类型的对象 Vehicle sportcar; //创建了另一个对象 int range1, range2; //给minivan的字段赋值 minivan.passengers = 7; minivan.fuelcap = 16; minivan.mpg = 21; //给sportcar的各个字段赋值 sportcar.passengers = 2; sportcar.fuelcap = 14; sportcar.mpg = 12; range1 = minivan.fuelcap * minivan.mpg; range2 = sportcar.fuelcap * sportcar.mpg; cout << "Minivan can carry " << minivan.passengers << " with a range of " << range1 << "\n"; cout << "Sportcar can carry " << sportcar.passengers << " with a range of " << range2 << "\n"; return 0;}
程序的输出如下:
Minivan can carry 7 with a range of 336
Sportcar can carry 2 with a range of 168
正如我们看到的那样,minivan的数据和sportcar的数据时完全分开的。图8-1描述了这种情况:
图8-1 不同对象的实例变量之间是相互对立的
练习
1. 一个类可以含那两部分的内容?
2. 通过对象来访问类的成员的时候需要什么运算符?
3. 每一个对象都含有类的____的副本。
- C++初学者指南 第八篇(2)
- c++初学者指南 第八篇(1)
- C++ 初学者指南 第八篇(3)
- c++ 初学者指南 第八篇(4)
- C++初学者指南 第八篇(7)
- C++初学者指南 第八篇(8)
- C++初学者指南 第八篇(9)
- C++初学者指南 第八篇(10)
- C++初学者指南 第八篇(11)
- C+++初学者指南+第六篇(5)
- C+++初学者指南+第六篇(6)
- C+++初学者指南+第六篇(7)
- Objective-C初学者指南(第2版)
- C++:初学者的指南
- Objective-C 初学者指南
- Objective-C 初学者指南
- C++ 初学者指南 第八章(5)
- C++ 初学者指南 第八章(6)
- 居然是BUG~!
- 如何查看到oracle 端口号和服务名
- 正则的知识
- [转帖]WinCE的网络驱动实现原理
- 自制液晶电视
- C++初学者指南 第八篇(2)
- [转载]SVM入门(三)线性分类器Part 2
- [转载]SVM入门(四)线性分类器的求解——问题的描述Part1
- [转载]SVM入门(五)线性分类器的求解——问题的描述Part2
- 查看是不是中文
- [转载]SVM入门(六)线性分类器的求解——问题的转化,直观角度
- 屏幕右下角消息提示
- ClearCase完全攻略(十)CCRC维护:Base模式环境搭建,Base下概念再解析
- orcl连接不上解决的办法