萌新的学习笔记,写错了恳请斧正。
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是类的名字;花括号中是类的主体。
同样的,我们可以在类体中放成员变量和成员函数,但是类中成员函数的定义可以有两种方式:
-
定义与声明都放在类中,对于一些简单的小函数直接定义在类中比较方便:
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; }
在这种情况下,编译器更倾向于将这样的函数作为内联函数处理。
-
定义放在类外,声明放在类中,这样可以让拥有较多较大函数的类看起来更直观:
#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