简单类声明示例:
[C++] 纯文本查看 复制代码
class queue {
int q[100];
int sloc, rloc;
public:
void init();
void qput(int i);
int qget();
};
class 是声明类的关键字。queue 是一个类,类中声明的 q[100] 数组和 sloc, rloc 是成员变量;init(), qput(), 和 qget() 是成员函数。笼统地说,组成类的函数和变量都可以称为类的成员。注意上面声明类的末位不要遗漏 ';' 符号。
类可以包含 公有成员 和 私有成员。在默认情况下,类的成员是私有的,比如上面的成员变量 q, sloc 和 rloc 都是私有的。私有成员只能被类 queue 中的成员访问,而程序中其它代码是不能访问这些变量的。如下面程序所示:
[C++] 纯文本查看 复制代码
#include <iostream>
using namespace std;
class queue {
int q[100];
int sloc, rloc;
public:
void init();
void qput(int i);
int qget();
};
void queue::init()
{
rloc = sloc = 0;
}
void queue::qput(int i)
{
if (sloc == 100) {
cout << "Queue is full.\n";
return ;
}
sloc++;
q[sloc] = i;
}
int queue::qget()
{
if (rloc == sloc) {
cout << "Queue underflow.\n";
return 0;
}
rloc++;
return q[sloc];
}
int main(void)
{
queue a, b;
a.init();
b.init();
cout << a.sloc << " ";
cout << b.sloc << "\n";
return 0;
}
上面程序在 main() 中定义了两个 queue 对象 a 和 b 。这里尝试直接在 main() 中访问类中的私有成员变量 sloc,那么在编译时会看到编译器发出的错误报告:$ g++ class.cc -o class
class.cc: In function ‘int main()’:
class.cc:6: error: ‘int queue::sloc’ is private
class.cc:45: error: within this context
class.cc:6: error: ‘int queue::sloc’ is private
class.cc:46: error: within this context 在上面对类的成员函数 init(), qput(int i), 和 qget() 的实现中看到符号" ::" --- 它被称为作用域解析运算符。也就是说,它告诉编译器函数这些函数是属于类 queue 的。换句话说, :: 表明函数 qput() 在类 queue 的作用域之内。
关键字 public 用来声明类的公有成员。如果要将类的一部分成员对外部代码开放(程序中其他代码也可以访问这些成员),那么必须用 public 关键字来声明它们。所有定义在 public 后面的变量或函数都可以被程序中的其他函数访问。
很重要一点:只能通过类的成员函数访问类的私有成员!
修改并完善上面的程序如下:
[C++] 纯文本查看 复制代码
#include <iostream>
using namespace std;
class queue {
int q[100];
int sloc, rloc;
public:
int anybody;
void init();
void qput(int i);
int qget();
};
//初始化
void queue::init()
{
rloc = sloc = 0;
}
//将一个整数放到队列中
void queue::qput(int i)
{
if (sloc == 100) {
cout << "Queue is full.\n";
return ;
}
sloc++;
q[sloc] = i;
}
//从队列中获得一个整数
int queue::qget()
{
if (rloc == sloc) {
cout << "Queue underflow.\n";
return 0;
}
rloc++;
return q[sloc];
}
int main(void)
{
queue a, b;
a.init();
b.init();
a.qput(10);
b.qput(30);
a.qput(20);
b.qput(40);
cout << a.qget() << " ";
cout << a.qget() << "\n";
cout << b.qget() << " ";
cout << b.qget() << "\n";
a.anybody = 99;
b.anybody = 100;
cout << "a.anybody: " << a.anybody << "\n";
cout << "b.anybody: " << b.anybody << "\n";
return 0;
}
运行输出:$ ./class
20 20
40 40
a.anybody: 99
b.anybody: 100 有上程序可见,私有变量成员只能通过类的成员函数来访问;被 public 声明过的公有变量成员 anybody 可以直接在 main() 中访问。 |