我是靠谱客的博主 怕孤独烤鸡,最近开发中收集的这篇文章主要介绍C++中的类与this指针类的定义类的限定符以及封装类的作用域:类的实例化:类对象模型(大小)this 指针,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

类与this指针

  • 类的定义
  • 类的限定符以及封装
  • 类的作用域:
  • 类的实例化:
  • 类对象模型(大小)
  • this 指针

类的定义

C++ struct:可以定义数据以及函数,一般使用class

struct Student
{
void display()
{
}
void setId(int id)
{
_id = id
}
char name[10];
int _id;
};
class Student
{//成员函数
public://共有成员在任何地方可用
void display()
{
}
void setId(int id)
{
_id = id
}
private://私有的成员在类外不可见
//成员变量,属性
char name[10];
int _id;
protected://保护的成员在类外不可见
char major[10];
};

类的限定符以及封装

访问限定符:public,protected, private

限定符表示范围,从当前限定符开始,到下一个限定符结束,只限制成员在类外的访问,类内访问不受限制

class 定义成员默认访问权限为私有
struct 定义的成员默认访问权限是共有

建议显式的写出来,以增加可读性
类的封装:将数据和操作数据的方法有机结合,隐藏属性和实现的细节,仅对外公开接口来和对象进行交互

类的作用域:

​ 类定义了一个新的作用域,所有类的成员都在类的作用域中。在类体外定义成员,需要使用::作为域解析符,指明成员属于哪个类域

类的实例化:

​ 变量:对象 ---->自定义类型的变量一般习惯称为对象

类只是一个模型一样的东西,限定了类有哪些成员,定义一个没有分配实际的内存空间来存储它

一个类可以实例化多个对象,实例化出的对象,占用实际的物理空间,存储类成员变量

类对象模型(大小)

class A
//4字节
{
int _a;
};
class B
//4字节
{
int _b;
void fun1()
{
int a = 1;
float b = 2.0;
char c = 'a';
}
};
class C
//1字节
{
void fun1()
{
int a = 1;
float b = 2.0;
char c = 'a';
}
};
class D
//1字节
{};

对象模型中只存放普通的成员变量,不存放成员函数,成员函数存放在公共代码段

空类占一个字节(起到标记作用)

类的大小遵循内存对齐规则

  1. 第一个成员在与结构体偏移量为0的地址处。
  2. 其他成员变量要对齐到某个数字(对齐数)的整数倍地址处。 (对齐数 = 编译器默认对齐数与该成员大小的较小值,VS默认为 8 ,Linux和当前字段sizeof值一样)
  3. 结构体总大小为:最大对齐数(所有变量类型的最大者与默认对齐数取最小)的整数倍。
  4. 如果存在嵌套,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍处。

!!!!如果嵌套的结构体只有定义,那么算大小的时候不算它!!!!!

class A
//48 字节
{
char _a;
double _b;
int _c;
char _d;
class B
{
double _a;
char _b;
int _c;
char _d;
};
B b;//关键点
};
class A
//24字节
{
char _a;
double _b;
int _c;
char _d;
class B
{
double _a;
char _b;
int _c;
char _d;
};
};

为什么要内存对齐?

答:提高访问效率,CPU读取内存是按块读取的,内存对齐可以提高访问效率,方便一些硬件(如嵌入式)读取数据

如何修改内存对齐数:#pargma pack()

this 指针

C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有成员变量的操作,都是通过该 指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。
this 指针类型:类类型* const

this指针只存在于成员函数中

this指针始终作为成员函数的第一个行参

this不是类的成员,只是一个函数行参,一般存在于栈上,一般会做优化,存在寄存器中

有解引用的情况下this指针不能为空!

最后

以上就是怕孤独烤鸡为你收集整理的C++中的类与this指针类的定义类的限定符以及封装类的作用域:类的实例化:类对象模型(大小)this 指针的全部内容,希望文章能够帮你解决C++中的类与this指针类的定义类的限定符以及封装类的作用域:类的实例化:类对象模型(大小)this 指针所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部