类的定义
1.1 类定义格式
• class为定义类的关键字,class后面为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省
略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的⽅法或
者成员函数。
• 为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前⾯或者后⾯加_ 或者 m
开头,注意C++中这个并不是强制的
• C++中struct也可以定义类,C++兼容C中struct的⽤法,同时struct升级成了类,明显的变化是
struct中可以定义函数,⼀般情况下还是推荐⽤class定义类。
• 定义在类⾯的成员函数默认为inline。
下面我们来举个例子看看
# include<iostream>
using namespace std;
class date//创建一个日期类
{
public:
void printf();//成员函函数
//........
private:
int _year;
int _month;
int _day;//成员变量
};
int main()
{
return 0;
这就是一非常普通的一个类的声明,同样在c++中也兼容c语言里面的struct结构体的用法
typedef struct a// C++兼容C中struct的⽤法
{
int val;
}a;
// 不再需要typedef,a就可以代表类型
struct a
{
void Init(int x)
{
val = x;
}
int val;
};
访问限定符
C++⼀种实现封装的⽅式,⽤类将对象的属性与⽅法结合在⼀块,让对象更加完善,通过访问权限
选择性的将其接⼝提供给外部的⽤⼾使⽤。
• public修饰的成员在类外可以直接被访问;protected和private修饰的成员在类外不能直接被访
问。
• 访问权限作⽤域从该访问限定符出现的位置开始直到下⼀个访问限定符出现时为⽌,如果后⾯没有
访问限定符,作⽤域就到 }即类结束。
• class定义成员没有被访问限定符修饰时默认为private,struct默认为public。
• ⼀般成员变量都会被限制为private/protected,需要给别⼈使⽤的成员函数会放为public。
就拿日期类来说,我们想访问修改成员变量的话,我们只能通过成员函数来操作成员变量,这相比较于C语言,这是非常安全的,只要成员函数没问题,是不怎么会出现非法的访问情况的,就拿C语言里面的栈来说,我们想取得栈顶元素通常会用一个函数来取得,取得栈顶元素很简单直接让top–就行,所以我们也可以在主函数里面操作,而不需要通过专门的函数,这里就非常危险,假设,栈里面没有数据,直接top–会发生非法访问
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zo771B3F-1721629951018)(https://i-blog.csdnimg.cn/direct/7e1e732047794ef5b2c9eb9331c5ef7a.png)]
如果我们定义成员变量是私有的话,我们是不能直接修改成员变量的,要修改就只能通过成员函数,像下面这样就是合法的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8Mgv7xO7-1721629951019)(https://i-blog.csdnimg.cn/direct/edb7364509d94fcc8125b52478b221d5.png)]
类域
• 类定义了⼀个新的作⽤域,类的所有成员都在类的作⽤域中,在类体外定义成员时,需要使⽤ :: 作
⽤域操作符指明成员属于哪个类域。
• 类域影响的是编译的查找规则,下⾯程序中 init_year如果不指定类域date,那么编译器就把Init_year当成全局函数,那么编译时,找不到_year等成员的声明/定义在哪⾥,就会报错。指定类域date,就是知道Init_year是成员函数,当前域找不到的_year等成员,就会到类域中去查找。就像下面这样
# include<iostream>
using namespace std;
class date
{
public:
void