一、类的定义格式
1、首先我们创建一个类:
#include<iostream>
using namespace std;class Stack
{//公有的
public://定义一个成员函数并给一个默认的缺省值void Init(int n = 6){int* arr = (int*)malloc(sizeof(int) * n);if (arr == NULL){perror("malloc");exit(1);}_capacity = n;_top = 0;}//私有的//定义成员变量
private:int* _arr;int _capacity;int _top;
};
class为定义类的关键字,Stack为类的名字,{}中的为类的主体,需要注意的是类的定义结束后最后的分号是不能省略的。
类中的内容称为类的成员:类中的变量称为类的属性或者成员变量、类中的函数称为类的方法或者成员函数。
可以看到在定义成员变量时,每个变量前面都加了 "_" ,这是定义成员变量时添加的一个特殊标识,主要是为了区分成员变量,该特殊标识不是强制性添加的,可以不加。
我们知到C++是完全兼容C的,所以在C中的大部分用法在C++中同样适用:比如struct的用法
只不过在C++中struct在使用中可以被升级成定义类的关键字,与class的用法相同,但是不推荐使用。
定义在类前面的成员函数默认为inline。
2、下面是我们之前使用C来push、top、destroy数据的过程
class Stack
{//共有的
public://定义一个成员函数并给一个默认的缺省值void Init(int n = 6){int* arr = (int*)malloc(sizeof(int) * n);if (arr == NULL){perror("malloc");exit(1);}_capacity = n;_top = 0;}//再定义一些成员函数//插入数据void Push(int x){//扩容_arr[_top++] = x;}//取顶部数据int Top(){assert(_top > 0);return _arr[_top - 1];}//销毁void Destroy(){free(_arr);_arr = nullptr;_capacity = _top = 0;}//私有的//定义成员变量
private:int* _arr;int _capacity;int _top;
};int main()
{//调用初始化 插入 取数据 销毁函数return 0;
}
3、使用C++的方式来实现相关的方法
// 定义一个时间类
class Data
{
public:// 对这个类进行初始化操作// 可以全部给缺省值也可以都不给//void Init(int year = 1, int month = 1, int day = 1)void Init(int year , int month , int day ){year = _year;month = _month;day = _day;}// 定义类成员
private:int _year;int _month;int _day;};
int main()
{Data d;d.Init(2024,9,14);return 0;
}
二、C++中的访问限定符
1、publice:修饰的成员可以在类外直接访问 公共的
2、private:修饰的成员不可以在类外访问 私有的
3、class定义的类中的成员在没有被访问限定符修饰时默认为private
4、struct定义的类中的成员在没有被访问限定符修饰时默认为public
作用域:它们的作用域都是从当前限定符开始一直到下一个限定符的出现,如果后面没有访问限定符那么就一直到遇到下一个}终止。
三、类域
类定义了一个新的作用域,类所有成员都在类的作用域中,在类外定义成员时,需要使用::作用域操作符指明成员属于哪个类域。
class Stack
{
public:void Init(int age = 18);
private:int _age;
};void Init(int age)
{age = 18;cout << age << endl;
}
void Stack::Init(int age)
{age = 20;cout << age << endl;
}int main()
{Stack st;st.Init();
}
可以看到最终的输出结果是20。这也就说明了类域影响的编译的查找规则,上面程序中的Init调用,编译器会输入被类域所影响的函数。
当我们单独调用Init函数时,编译器报错,参数太少。
说明这里的Init并不是上面类中定义的Init,而是被编译器认定为一个全局变量,在这个为指定的函数中是不能找到上述定义的成员变量的。