类的认识及使用

Posted The August

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类的认识及使用相关的知识,希望对你有一定的参考价值。

类的使用

引用

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

以上是关于类的认识及使用的主要内容,如果未能解决你的问题,请参考以下文章

[java初探05]__数组的简单认识及Arrays类的常用方法

第二次写博客

elasticsearch代码片段,及工具类SearchEsUtil.java

python中的异常类的认识理解?

Jekyll 偏移代码片段高亮的初始行

浅谈Kotlin:类