C++扩展了结构体的概念,使之可以包含函数作为结构成员,作为成员函数,结构体的数据成为数据成员,而这样的结构体被称为类,我们对我在上一篇c++的文章中实现的功能进行优化,把我的代码呈现如下:
#include <iostream>
using namespace std;
const int max_len = 1000; //栈的最大容量
const int EMPTY = -1;
const int FULL = max_len - 1;
struct chstack
{
char s[max_len]; //栈的内容保存在字符串s里面
int tp; //栈顶指示器,栈空时为-1
void clear() { tp = EMPTY; }
void push(char c) { s[++tp] = c; }
char pop() { return s[tp--]; }
char top() { return s[tp]; }
bool empty() { return (tp == EMPTY); }
bool full() { return (tp == FULL); }
};
//实现字符串逆序输出,当然,是杀鸡用牛刀
//这下面是fucku.cpp
int main()
{
char str[50] = { "Oh yeah com'on let's go do you like what you see" };
cout << str << endl;
chstack s;
s.clear(); //对s进行clear操作
int i = 0;
while (str[i] && !s.full())
s.push(str[i++]);
while (!s.empty())
cout << s.pop();
cout << endl;
system("pause");
}
进行优化的理由:对本菜鸡而言,指针是原罪。
其次,其中成员函数可以在类内部定义,也可以在类外定义,如果在类外定义的话,函数名前要加类的名字和作用域符::,表示这个函数是属于这个类里面的(当然不同于全局函数)。
比如: void chstack::clear() {tp=EMPTY;}
提一句,在类内部定义的函数默认为内联inline函数。如果想在类外定义内联inline函数,需要显示地呈现关键字inline。
C++通过限定成员的访问权限来设置边界,实现信息隐藏。访问限定符就是做这么一个事的,关键字public、private和protected被称为访问限定符,在类的定义中使用,一般语法如下:
struct 类名
{
public:
公有成员声明;
private:
私有成员声明;
protected:
受保护成员声明;
}
如果没有指定访问限定符,都默认是public。
public成员在程序的任何函数或者类中都可以被访问 。public用于说明类接口中的成员,客户程序通过public成员可以操控该类型的对象;private成员之讷讷感狗由类自己的成员函数或友元访问,需要隐藏信息的话应声明为private;protected成员访问权限介于上述二者之间,主要用于继承当中,这个还是后话。
我们在定义的时候,一般先写public再写private、protected。
在清华的教材中,编者建议,应该尽可能限制类成员的访问性,一般而言,多隐藏比少隐藏好。(有待实践考证)