当前位置: 首页> 房产> 建筑 > C++中类的定义

C++中类的定义

时间:2025/7/10 16:05:54来源:https://blog.csdn.net/weixin_74202161/article/details/142262969 浏览次数:0次

一、类的定义格式

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,而是被编译器认定为一个全局变量,在这个为指定的函数中是不能找到上述定义的成员变量的。

关键字:C++中类的定义

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: