C++ 类的初探-扩展了的结构体

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。

在清华的教材中,编者建议,应该尽可能限制类成员的访问性,一般而言,多隐藏比少隐藏好。(有待实践考证)

猜你喜欢

转载自blog.csdn.net/qq_42229034/article/details/82015376