目录
类怎么来的?
在结构体的基础上延申出来的
祖师爷在原来C结构体的基础上进行了一个升级
就是结构体内部可以定义函数
于是,结构体内部的变量就叫做成员变量,函数叫做成员函数
这个结构体就不再是一个简单的结构体,而是一个类,可以实现相关的功能
而类的定义,实际上就是把结构体定义中的struct改成了class
类的定义:
1、一般来说,建议在成员变量前加一个_前缀,例如_menber
为什么?因为为了避免内部调用传参的时候发生混淆
2、如果类前没有加访问限定符,默认为private(私有);而struct默认为public(公开)
3、访问限定符分:public(公共)、protected(保护)、private(私有)
public(公共):在类外部可以被访问
protected(保护)、private(私有)在类外部不可以被访问(继承部分会有变化)
4、定义类时,可以和struct一样的定义,但是一般定义类不会写class前缀
5、访问限定符怎么用?在类内部使用,作用范围直到下一个限定符为止,直到作用域结束
关于类域:
类本身就是一个域,类似于命名空间域
一个函数、一个for循环、一个类、只要有{}符号,内部都可以看作一个域
而域改变的是搜索规则
类如何做声明定义分离?
注意,声明定义分离最重要的是要解决定义要互相能够找到,要么域打开到全局,要么指定访问
所以,类中的成员函数使用的是指定访问
即在成员函数定义的前面加上::域访问限定符,指定这个函数是某个类的成员函数
但是,并不是说指定了类,就只会到类域中去找
而是,首先是局部域、再类域,类域没有再去全局域,都没有,报错
类的大小:
sizeof(类名):只计算成员变量,(遵循内存对齐)
为什么只计算成员变量呢?
设想一个场景:
有一个类,实例化了1w个对象
那么,这1w个对象的成员变量都是不一样的,因为类对象成员变量可以理解为对象的属性
但是,他们的函数是不是也不一样呢?
不,他们的成员函数都是一样的
那么,加入每个类都存储他们的函数方法,那么就会凭空多出1w个函数的地址空间
而这个空间内的内容又都是一样的,是不是一种特别蛋疼的捏村浪费?
是的,没错,就是浪费
所以,成员函数不存储在类内,而是单独抽取出来,在一个公共域
这个公共域叫做代码段
因此,记住,对象只存成员变量
那么,问题又来了:
如果一个类内部,一个成员变量都没有,只有成员函数
那,这个类的大小是多少?
按上面的逻辑,是0对吗?
好,那么,问题又来了:
即使这个类的内存是0
那,你怎么证明这个类存在?
去哪找这个类?这个类在哪!?!天上?海底?还是你心里?
所以,明显给0是不靠谱的
所以,祖师爷规定:
没有成员变量的类大小是1bety,也就是1字节
就是为了记录这个类存在过
相关知识:
关于定义:
变量定义的标志是开辟空间
定义不是初始化,初始化是给定义初始一个值,概念不要混淆
封装:
把数据和函数封装起来,起到一个保护的作用,不让外部访问修改的private,可以让外部访问修改的pubilc或者protected
使得代码更加规范,舒爽
C语言是面向过程编程
C++是面向对象编程