c++2
1、面向对象编程 中的类和对象
面向对象:代码中 由一个一个的对象组成(对象:数据+算法)面向过程:数据+算法四大特性:抽象、封装、继承、多态
结构体
为了描述一类事物的属性而自定义的数据类型;struct
c与c++结构体区别
- 1.C中的结构体中不可以有函数;C++中的结构体中是可以有函数
- 2.C中空结构体占内存大小为0; C++中空结构体占内存大小为1;
对象
使用类这个自定义的数据类型定义出来的变量就是对象
创建类对象的方法
类名 对象名;类名 *对象名 = new 类名; delete 对象名去释放!
- 类对象数组
- 类对象指针数组
c++中类与结构体区别
类
- 描述一类事物的属性和行为而自定义的一种数据类型
- 关键字:class格式: class 类名{属性+行为};
- 3种限定访问符
• public: 公有的,公共的 在类的内部+外部都可以使用private: 私有的,只能在类的内部去使用;protected: 受保护的 只能在类的内部去访问
• 类内: 类定义{};内部类外: 类定义的{};的外部
• 要修改和获取类private的成员值,通过public区域提供set,get接口函数去实现
区别
- 1.C++中结构体内部的成员默认访问限定符是public;C++中类内部的成员默认访问限定符是private;
- 2.关键字不一样,一个struct、一个是class
- 3.定义变量的时候,初始化的方式是不一样的
2、抽象和封装
抽象
例如class是描述一类共同属性的对象的抽象
什么是封装
把一类事物的属性和行为整合在一起,用类这个自定义的数据类型包起来,该隐藏的隐藏起来,该暴露的暴露出来!
需要隐藏的: 属性都是隐藏起来;private区域需要暴露的: 行为就是提供的一些接口, public区域的!
类和对象关系
类:是抽象的对象: 是具体的
- 类是对象的抽象; 对象是类的具体实例
创建类对象, 给数据成员分配的空间存数据成员的信息,数据成员占内存大小之和遵循内存对齐原则
3.this指针
1.this指针是类类型的指针变量;保存对象的地址;哪个对象调用成员函数, this指的就是谁的地址
2.类的成员函数都有一个隐藏的参数,是本类类型的指针;当通过对象去调用这个函数的时候,就会把这个对象的地址偷偷传进去
隐藏参数:类名 * const this;
3.类的成员只能通过类的对象去访问,不管是类内还是类的外部都一样
访问
普通对象的访问成员:对象名.成员名
指针类型的对象访问成员: 指针->成员
如果在类的成员函数中访问类的成员,在成员前面加上this指针,可以避免形参和成员名字一样没法区分
4.类中的特殊的成员
1.构造函数
构造函数
- 本身是函数,作用是给对象数组成员分配内存空间,对数据成员进行初始化
- 没有函数类型、函数名和类名一样;格式:类名 () {}
• 参数不定 函数构造可以重载
- 使用
• 创建对象的时候,系统会自动帮我们去调用,根据参数的个数、类型、顺序去匹配合适的构造去执行
• 当我们自己没有写构造函数的话,系统会帮我们生成 无参、函数体无内容的一个默认的构造函数当我们自己写了构造函数,系统不会再帮我们生成构造函数了
默认构造
- 构造函数没有参数或者是构造函数的所有参数都有默认值,就是默认构造函数
- 几种情况
• 1.自己写的构造函数没有参数的2.系统帮我们生成的3.自己写的构造函数参数都有默认值
• 在一个类中,默认构造只能有一个,他们是互斥
- 创建时对象名+()里面什么都不给,它不会执行构造函数,对象没有创建成功
2.析构函数
定义格式
- ~类名(){}
作用
- 释放对象所占内存空间
- 如果在构造函数中有在堆区分配内存空间,在析构中要去做释放
什么时候调用
- 对象要被释放的时候,系统会自动的帮你去调用析构函数
- 自己没有写析构函数,系统会帮我们生成一个空的析构函数,然后自动调用;当我们自己写这个析构函数,系统就不会帮我们生成了
3.拷贝构造函数
拷贝构造
- 格式
• 函数名和类名一样,参数有一个并且这个参数是当前这个类类型的引用
- 何时执行拷贝构造
• 1。用已经存在的对象去初始化一个正在新创建的对象的时候,会去执行拷贝构造!2.当函数的参数是类类型的对象时,在调用此函数时也会执行拷贝构造
• 先构造后析构
深拷贝
- 当我们在类的构造函数中有用new或者malloc在堆区分配内存空间的时候,并且,就需要进行深拷贝,这个时候拷贝构造函数就需要我们自己来写,进行深拷贝
•
浅拷贝
- 如果我们自己不写拷贝构造函数,系统帮我们自动生成的是浅拷贝构造函数,只是做简单的数据成员值的赋值
•
本文详细介绍了C++中的面向对象编程概念,包括类与对象的区别、结构体的特性以及C++特有的类访问权限。探讨了抽象和封装的概念,强调了类作为对象抽象的重要性。同时,讲解了this指针的作用,以及构造函数、析构函数和拷贝构造函数的功能和使用场景,强调了它们在对象生命周期中的关键角色。
11万+

被折叠的 条评论
为什么被折叠?



