资讯专栏INFORMATION COLUMN

类的认识及使用

alexnevsky / 1732人阅读

摘要:注意空类的大小,空类比较特殊,编译器给了空类一个字节来唯一标识这个类。如果一个类没有对象,那么它的对象需要给进行占位,标识对象存在,这不存储有效数据。

类的使用

引用

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/122187.html

相关文章

  • 【C++】初识类和对象

    摘要:三类的定义类体由成员函数和成员变量组成一定要注意后面的分号为定义类的关键字,为类的名字,中为类的主体,注意类定义结束时后面分号。在类和对象阶段,我们研究类的封装特性。 ...

    garfileo 评论0 收藏0
  • Java开发

    摘要:大多数待遇丰厚的开发职位都要求开发者精通多线程技术并且有丰富的程序开发调试优化经验,所以线程相关的问题在面试中经常会被提到。将对象编码为字节流称之为序列化,反之将字节流重建成对象称之为反序列化。 JVM 内存溢出实例 - 实战 JVM(二) 介绍 JVM 内存溢出产生情况分析 Java - 注解详解 详细介绍 Java 注解的使用,有利于学习编译时注解 Java 程序员快速上手 Kot...

    Lucky_Boy 评论0 收藏0
  • Java开发

    摘要:大多数待遇丰厚的开发职位都要求开发者精通多线程技术并且有丰富的程序开发调试优化经验,所以线程相关的问题在面试中经常会被提到。将对象编码为字节流称之为序列化,反之将字节流重建成对象称之为反序列化。 JVM 内存溢出实例 - 实战 JVM(二) 介绍 JVM 内存溢出产生情况分析 Java - 注解详解 详细介绍 Java 注解的使用,有利于学习编译时注解 Java 程序员快速上手 Kot...

    LuDongWei 评论0 收藏0
  • 认识构造函数

    摘要:创建构造函数对象有属性和方法,如果多个函数的属性和方法均相似,我们就可以将其归为一个类,使用的时候,就可以直接调用。要设置专属属性和方法,很简单,直接在构造函数内添加就行了创建专属属性创建专属方法 构造函数 使自己的对象多次复制,同时实例根据设置的访问等级可以访问其内部的属性和方法 当对象被实例化后,构造函数会立即执行它所包含的任何代码 一般我们创建一个对象,最直接的方法就是var o...

    mushang 评论0 收藏0
  • [零基础学python]关于类的初步认识

    摘要:反对者在某些领域对此予以否认。下面再引用一段来自维基百科中关于的历史。类的更严格的定义是由某种特定的元数据所组成的内聚的包。类还可以有运行时表示形式元对象,它为操作与类相关的元数据提供了运行时支持。 在开始部分,请看官非常非常耐心地阅读下面几个枯燥的术语解释,本来这不符合本教程的风格,但是,请看官谅解,因为列位将来一定要阅读枯燥的东西的。这些枯燥的属于解释,均来自维基百科。 1、问题...

    王岩威 评论0 收藏0

发表评论

0条评论

alexnevsky

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<