类的使用
引用
C++兼容C结构体的语法 C++中的struct已经不仅仅是结构体,struct已经同时升级成类。
类的定义
class className
{
};
class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号。 类中的元素称为类的成员:类中的数据称为类的属性或者成员变量; 类中的函数称为类的方法或者成员函数。 struct可以定义类,但在C++中更喜欢用class来代替
C语言面向过程——数据和方法是分离的 C++面向对象——数据和方法是封装在一起的
struct和class的区别
总结:
- C++实现封装的方式:用类将对象的属性与方法结合在一块,让对象更加完善,通过访问权限选择性的将其接口提供给外部的用户使用。
- 访问限定符:public(公有)、protected(保护)、private(私有)
- public修饰的成员在类外可以直接被访问
- protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)
- 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
- class的默认访问权限为private,struct为public(因为struct要兼容C)
上方代码改正:
class stack
{
public:
void StackInit()
{
}
void StackPush(int x)
{
}
private:
int* a;
int top;
int capacity;
};
int main()
{
stack st;
st.StackInit();
st.StackPush(1);
return 0;
}
封装
总结:
- 类的定义和设计就体现了封装
- 面向对象的三大特性:封装、继承、多态(最为出名的)、抽象、反射(Java)。
- 封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。
- 封装本质是一种管理。
类的作用域
改正:将Queue.cpp文件
#define _CRT_SECURE_NO_WARNINGS 1
#include"Queue.h"
void Queue::QueueInit()
{
}
void Queue::QueuePush(int x)
{
}
void Queue::QueuePop()
{
}
总结:
- 类中的成员函数在声明和定义分离时需要使用 :: 作用域解析符指明成员属于哪个类域。
- 短小的成员函数,直接在类里面定义,直接被看成内联函数inline
- 长的函数,声明和定义分离
类的实例化
总结:
- 用类类型创建对象的过程,称为类的实例化
- 类只是一个模型一样的东西,限定了类有哪些成员,定义出一个类并没有分配实际的内存空间来存储它
- 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量
类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间。
计算类对象的大小
知识点:
- 计算类型大小或者是类对象,只考虑成员变量,因为对象中,只存了成员变量,没有存成员函数
- 对于类对象:只保存成员变量,成员函数存放在公共的代码段。
- 一个类的大小,实际就是该类中”成员变量”之和,当然也要进行内存对齐。
- 注意空类的大小,空类比较特殊,编译器给了空类一个字节来唯一标识这个类。
- 如果一个类没有对象,那么它的对象需要给1byte进行占位,标识对象存在,这1byte不存储有效数据。
结构体内存对齐规则:
https://blog.csdn.net/AI_ELF/article/details/117877990?spm=1001.2014.3001.5501
|