类的认识及使用

类的使用

引用

在这里插入图片描述

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()// 这里需要指定QueueInit是属于Queue这个类域
{

}
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

  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值