椋鸟C++笔记#2:从结构体到类


萌新的学习笔记,写错了恳请斧正。

C++中的结构体

我们在C语音中学的结构体在C++依旧适用,而且增加了其他的功能。

在C++中,结构体不仅可以用来定义变量,还可以定义函数

在这个函数内,还可以直接使用结构体中的变量。

比如之前我们在数据结构中实现的栈现在可以这样全部放在结构体内部:

#include <iostream>

using namespace std;

typedef int DataType;

struct Stack
{
   
	void Init(size_t capacity)
	{
   
		m_arr = (DataType*)malloc(sizeof(DataType) * capacity);
		if (nullptr == m_arr)
		{
   
			perror("malloc");
			return;
		}
		m_capacity = capacity;
		m_size = 0;
	}

	void Push(const DataType& data)
	{
   
		m_arr[m_size] = data;
		++m_size;
	}

	void DataType Top()
	{
   
		return m_arr[m_size - 1];
	}

	void Destory()
	{
   
		if (nullptr != m_arr)
		{
   
			free(m_arr);
			m_arr = nullptr;
			m_capacity = 0;
			m_size = 0;
		}
	}

	DataType* m_arr;
	size_t m_capacity;
	size_t m_size;
};

int main()
{
   
	Stack stack;
	stack.Init(10);
	stack.Push(1);
	stack.Push(2);
	stack.Push(3);
	stack.Push(4);
	
	cout << stack.Top() << endl;

	stack.Destory();

	return 0;
}

我们发现,这样把一类方法的所有函数和变量封装在一起的方式非常高效,便于代码调用和管理。

在C++中,引入了一个更加适合这样的封装调用的方式,那就是类(Class)

类的定义

class classname
{
   
    //类体,包括成员变量和成员函数
};	//注意这里要加分号,与结构体类似

class是C++的关键字,用于定义类;classname是类的名字;花括号中是类的主体。

同样的,我们可以在类体中放成员变量和成员函数,但是类中成员函数的定义可以有两种方式:

  1. 定义与声明都放在类中,对于一些简单的小函数直接定义在类中比较方便:

    class Date
    {
         
        void SetDate(int y, int m, int d)
        {
         
            m_year = y;
            m_month = m;
            m_day = d;
        }
        
        int m_year;
        int m_month;
        int m_day;
    }
    

    在这种情况下,编译器更倾向于将这样的函数作为内联函数处理。

  2. 定义放在类外,声明放在类中,这样可以让拥有较多较大函数的类看起来更直观:

    #include <iostream>
    
    using namespace std;
    
    typedef int DataType;
    
    class Stack
    {
         
    	void Init(size_t capacity);
    	void Push(const DataType& data);
    	DataType Top();
    	void Destory();
    
    	DataType* m_arr;
    	si
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

椋鸟Starling

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值