类和对象
想象一个厨房……在这个厨房里,你会拥有各种电器(炉子、冰箱、微波炉、水壶等)。这些电器构成了厨房,没有它们,它就只是另一个房间。C++ 的工作方式基本上是相同的。厨房就是你的类,而所有其他电器都是类的成员。
定义类的通用
语法是:
1 2 3 4
|
class classIdentifier
{
classMembersList
};
|
**缺少分号会导致语法错误!
类的成员分为三类:
私有 (private)、
公有 (public)、
保护 (protected),这三者的统称是
成员访问限定符。
关于类的
私有和
公有成员的一些事实
(*)-- 默认情况下,所有成员都被声明为私有。
(*)-- 如果一个成员是
私有的,你无法在类外部访问它(示例 1 将对此进行说明)
(*)-- 一个
公有的成员可以在类外部访问(示例 1 将对此进行说明)
如何选择公有和私有?
假设我们想定义一个类来实现程序中的一天时间。我们称这个
类为 clockType。此外,我们使用 3 个变量如下:
1 2 3
|
int hr;
int min;
int sec;
|
我们还希望执行以下功能:
1. 设置时间
2. 获取时间
3. 打印时间 //嗯,我们需要读取它,对吧?
4. 时间增加 1 秒
5. 时间增加 1 分钟
6. 时间增加 1 小时
7. 比较两个时间是否相等
从上面可以看出,
clockType 类有 10 个成员变量。
好了,你已经走到这一步了,然后呢?这如何帮助解决公有和私有的困境?决定将哪些成员设为公有或私有取决于成员的性质。经验法则是:
*如果一个成员需要在类外部访问,将其声明为公有。
*任何不应被用户直接访问的成员都应声明为私有。
例如,用户应该能够设置时间和打印时间,所以它们应该是公有的。另外,增加时间和比较时间的功能也应该声明为公有。为了防止直接操作成员变量 hour、minute、second,我们将它们设为私有。
**请记住,如果用户可以直接访问这些成员,我们还需要 setTime 函数做什么?
你的代码现在看起来应该像这样:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
class clockType
{
public:
void setTime(int,int,int);
void getTime(int&,int&,int&) const;
void printTime() const;
void IncrementSeconds();
void IncrementMinutes();
void IncrementHours();
bool equalTime(const clockType&) const;
private:
int hr;
int min;
int sec;
};
|
(*)--
const 关键字指定这些函数不能修改 clockType 类的变量的成员变量。
对象声明
到目前为止,我们一直在使用“类变量”这个词,在技术 C++ 术语中,它被称为
对象。
声明类对象的
语法是:
clockType myClock; // 声明一个对象,myClock
访问类成员
对象访问类成员的
语法是:
类对象名.成员名 // . (点) 被称为点运算符
好了,我知道这些术语都挺枯燥的,你想看代码而不是读一篇论文(所以你选择了 C++ 而不是拉丁语),但跟上这些术语很重要,因为很多人在这里会卡住。好了,说够了,让我们展示一些代码。
示例 1 (代码片段)
以下代码片段将向您展示访问是如何工作的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
//Declaring our objects
clockType myClock;
clockType yourClock;
//Accessing
myClock.setTime(5,2,30)// values 5,2,30 passed as parameters to function setTime
myClock.printTime();
yourClock.setTime(x,y,z); //x,y,z are variables of type int.
if(myClock.equalTime(yourClock))
.
.
//Some code in here
.
.
//Illegal Statements
myClock.hr =10;
myClock.min = yourClock.min;
/*Illegal because hr and min are private variables and cannot be accessed by the objects*/
|
本教程到此结束,让所有这些内容消化一下。接下来我们将着手实现成员函数,并提供 clock 源代码的完整示例,并解释我所做的每一步。
</.X.>