【C++的类】

C++的类和对象

一.C和C++语言的区别:

1.C语言是一门面向过程的一门编程语言,而CPP是一门面向对象的语言。
如果要知道一架无人机从起飞到降落的过程,在面向过程中,首先地上操作人员要启动开关,无人机自行操作,在跑道到达一定的速度时,然后向上拉升,达到一定的高度时候在平稳飞行,块到达目的地的时候在降低飞行高度,在降落过程中,接触到跑道,就进行反向制动,最后无人机速度降为零,关闭开关。
在面向对象中,只需要关注操作人员和无人机,在天空的一系列行为只需要无人机自行处理,我们就不需要过多关注。

二.什么是类和对象

  1. 在C语言中,如果要实现一个栈或者链表,都要定义一个结构体来存储他们需要的变量。然后再通过函数来对结构体的数据进行操作,但是结构体声名的变量是可以进行访问的,如果直接就有可能造成一系列的问题
struct Stack{
	int* _a;
	int _size;
	int _capacity; 
};
void InitStack(struct Stack* s)
{
	s->_a = (int*)malloc(sizeof(int) * 3);
	s->_capacity = 3;
	s->_size = 0;
}
void Push_Back(struct Stack* s, int x)
{
	s->_a[s->_size++] = x;
}
int TopStack(struct Stack* s)
{
	return s->_a[s->_size - 1];
}
int main()
{
	struct Stack s;
	InitStack(&s);
	Push_Back(&s, 1);
	Push_Back(&s, 2);
	Push_Back(&s, 3);
	int ret1 = TopStack(&s);
	printf("%d\n", ret1);
	int ret2 = s._a[s._size];
	printf("%d\n", ret2);
	return 0;
}

在这里插入图片描述
如果使用程序员编写的TopStack函数获取栈顶元素,就不会运行得到一些奇怪的值,但是如果想直接通过结构体来访问,可能就会出得到奇怪的数值。ret1是通过函数来获取得到的,因为已经计算得出哪个位置是栈顶元素,所以会得到正确得答案。如果ret2直接访问结构体得成员变量,可能就会出错,可能使用得人认为栈顶得元素再_size得位置,其实不然,栈顶得元素是在_size - 1得位置。

class Stack {
public:
	Stack(size_t capacity = 5)
	{
		cout << " Stack()" << endl;
		_a = (int*)malloc(sizeof(int) * capacity);
		if (_a == nullptr)
		{
			perror("malloc fail");
			exit(-1);
		}
		_size = 0;
		_capacity = capacity;
	}
	void Push_Back(int x) 
	{
		_a[_size] = x;
		_size++;
	}
	int& Print_Top()
	{
		return _a[_size - 1];
	}
	~Stack()
	{
		cout << "~Stack()" << endl;
		free(_a);
		_a = nullptr;
		_size = 0;
		_capacity = 0;
	}
private:
	int* _a;
	int _size;
	int _capacity;
};
int main()
{
	Stack s;
	s.Push_Back(1);
	s.Push_Back(2);
	s.Push_Back(3);
	s.Push_Back(4);
	s.Push_Back(5);
	int ret = s.Print_Top();
	cout << ret << endl;
	return 0;
}

类和对象

在C++中,结构体被升级成类,类里面可以有成员变量和成员函数。class Stack中得class是关键字,表明是一个类,Stack是类名,Stack s中的s是Stack的对象,是实例化出来的对象。
在类中,public表明的是公开的,可以在类外边访问的成员变量和成员函数,private表明的是私有的成员变量,只能在类里边进行使用访问,在类外边是无法使用。如果要在类外边得到私有的成员变量,就要在类里编写一些public(共有)的成员函数作为接口来进行访问,Print_Top() 就是一个函数接口,在这个类里面,因为_szie是私有的,所以就不能直接访问,只能使用在共有的函数来访问,public的成员函数是存放在公共的代码区,不会在实例化的时候再开辟,然后通过实例化对象引用。C++就是通过对成员变量和成员函数整合再一个单元里面。使用者只需要关注对象的功能即可,不在需要面向过程。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值