类和对象(中)笔记

本文深入探讨C++中struct与class的区别,封装的概念,空类与结构体内存对齐的规则,this指针的工作原理,以及类中的六个默认成员函数:构造函数、析构函数、拷贝构造函数、运算符重载、取地址和const取地址操作符重载。同时,文章还详细解释了const成员函数的使用限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.C++中struct和class的区别是什么? 
答:C++需要兼容C语言,所以C++中struct可以当成结构体去使用。
      另外C++中struct还可以用来定义类,和class是定义类是一样的。
      区别是struct的成员默认访问方式是public,class是struct的成员默认访问方式 是private。
2.封装
     面向对象的三大特性:封装、继承、多态。
     在类和对象阶段,我们只研究类的封装特性,那什么是封装呢?
     封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行 交互。
3.一个类为空类对象占一个字节,若一个类中只有函数类对象也只占一个字节
4. 结构体内存对齐
1)第一个成员在与结构体偏移量为0的地址处。 
2) 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。 
注意:对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。 
VS中默认的对齐数为8,gcc中的对齐数为4
 3) 结构体总大小为:最大对齐数(所有变量类型最大者与默认对齐参数取最小)的整数倍。
 4) 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,
    结构体的整体大小就是 所有最大对齐数(含嵌套结构体的对齐数)的整数倍
设置默认对齐数:#prgma pack()
如何知道结构体a成员的偏移量             cout<<(((C*)0)->a)<<endl; 或者直接用内存对齐算
5.this指针
1) this指针的类型:类类型* const    地址不能改变内容可以改变             const int* a 地址可以改变内容不能变换
2)只能在“成员函数”的内部使用 
3) this指针本质上其实是一个成员函数的形参,是对象调用成员函数时,
    将对象地址作为实参传递给this 形参。所以对象中不存储this指针。 
4)this指针是成员函数第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传递,不需要用户 传递
6.类中的六个默认成员函数
1)构造函数:完成初始化。默认构造函数 类名()+{}和全缺省参数函数(也是默认构造函数)一个类中只能存在一个。
2)析构函数:对象在销毁时自动调用完成清理工作。 ~+类名()+{}
3)拷贝构造函数:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),
                             在用已存在的类类型对象 创建新对象时由编译器自动调用
                              类名(const 类名+引用+变量)+{}
                                  为什么形参要引用?
                                     如果是值传递每次调用都会发生拷贝,拷贝继续调用拷贝构造函数这样九无穷无尽的调用拷贝构造函数
                                     对 于引用来说不会发生拷贝,所以就不会调用拷贝构造函数 
                             若未显示定义,系统生成默认的拷贝构造函数。 默认的拷贝构造函数对象按内存存储按字节序完成拷 贝,
                             这种拷贝我们叫做浅拷贝,或者值拷贝。
4)运算符重载
                         函数名字为:关键字operator后面接需要重载的运算符符号。
                         函数原型:返回值类型?operator操作符(参数列表)
                          赋值运算符重载有四点:a. 参数类型 b. 返回值 c. 检测是否自己给自己赋值 d. 返回*this 
                                                               e. 一个类如果没有显式定义赋值运算符重载,编译器也会生成一个,完成对象按字节序的值拷贝。
                         Data d3=d1;是拷贝构造一个新对象d3  赋值运算符是两个变量要赋值必须先要存在
5)取地址
6)const取地址操作符重载
7.const成员
1) const对象可以调用非const成员函数吗? 不可以
2) 非const对象可以调用const成员函数吗? 可以
3) const成员函数内可以调用其它的非const成员函数吗? 不可以
4.)非const成员函数内可以调用其它的const成员函数吗? 可以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值