关于c++②

本文详细介绍了C++中的面向对象编程概念,包括类与对象的区别、结构体的特性以及C++特有的类访问权限。探讨了抽象和封装的概念,强调了类作为对象抽象的重要性。同时,讲解了this指针的作用,以及构造函数、析构函数和拷贝构造函数的功能和使用场景,强调了它们在对象生命周期中的关键角色。

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在堆区分配内存空间的时候,并且,就需要进行深拷贝,这个时候拷贝构造函数就需要我们自己来写,进行深拷贝

浅拷贝

  • 如果我们自己不写拷贝构造函数,系统帮我们自动生成的是浅拷贝构造函数,只是做简单的数据成员值的赋值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值