C++ ——— 类的访问限定符、声明和定义分离、所占空间的大小
目录
前言
在上一章简单了解到了面向过程和面向对象的不同之处
也了解到了在 C++ 中升级了 struct 为类
C++ ——— 面向过程和面向对象的初步认识以及类的引入-CSDN博客
但是在 C++ 中,类的使用更倾向于 class ,因为 class 中有访问限定符的存在,这也是 class 和 struct 的本质区别
访问限定符
class 和 struct 在 C++ 中可以定义成员函数和成员变量,不同之处就在于 calss 中有访问限定符
访问限定符的作用
用类将对象的属性于方法结合在一块,让对象更加完善,通过访问限定选择性的将其接口提供给外部的用户使用,通过访问限定符限定后,能防止重要内容被用户访问
访问限定符说明
1. public 修饰的成员在类外面可以直接被访问
2. protected 和 private 修饰的成员在类外面不能直接被访问
3. 访问权限作用域从该访问限定符出现的位置开始知道下一个访问限定符出现为止
4. 如果后面没有访问限定符,那么当前访问限定符的作用域就到 } 为止
5. class 的默认访问限定符为 private,struct 为 public
代码演示:
class Stack
{
// 共有
public:
// 成员函数
void Init()
{
a = nullptr;
size = capacity = 0;
}
// 私有
private:
// 成员变量
int* a;
int size;
int capacity;
};
一般来说,成员的变量都是私有的,是不能让用户随意访问的,所以设置成私有的
而成员函数是会需要调用的,所以一般把成员函数设置成共有的
注意:类里面不受访问限定符的限制,在共有域中也能访问私有域中的内容
类的声明和定义分离
类中定义的成员函数是可以做到定义和声明分离的
代码演示(在 .h 文件中):
class Stack
{
// 共有
public:
// 成员函数
void Init();
// 私有
private:
// 成员变量
int* a;
int size;
int capacity;
};
代码演示(在 .c 文件中):
void Stack::Init()
{
a = nullptr;
size = capacity = 0;
}
定义时需要利用 "::" 域作用限定符才能指定到类里面,因为函数中访问了类的成员变量,所以不通过指定的话就会报错
类所占内存空间的大小
前提:类也是遵循内存对齐规则的
代码演示:
class Data
{
public:
// 初始化
void Init(int year = 1946, int month = 2, int day = 14)
{
_year = year;
_month = month;
_day = day;
}
private:
int _year;
int _month;
int _day;
};
这是一个简单的日期类,有 3 个 int 类型的变量,和一个函数,猜测所占内存大概是16byte(3 个 int 类型一共占 12 byte,一个函数大概占 4 byte)
代码验证:
验证后发现并不是和猜测的一样,而是只占了 12 byte,所以可以再次猜测出函数没有占空间,或者说函数所占的内存空间不在类中
实践证明确实如此,因为变量是独立的,比如定义两个日期类的对象 d1 和 d2,如果年月日变量都是同样的内存的话,那就会出现错误,更改 d1 的年月日,d2 的年月日也会跟着改变
而函数是同一份函数,如果每个类中都存储各自的函数,那么会消耗大量的内存空间,所以函数是存储在公共代码区的
原文地址:https://blog.csdn.net/weixin_55341642/article/details/144351042
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!