当前位置: 首页 > news >正文

C++编程(三)面向对象

文章目录

  • 一、概念
  • 二、类的定义
    • (一)声明一个类类型的语法格式:
    • (二)类中的访问控制权限
    • (三)实例化对象
      • 1. 栈区对象
      • 2. 堆区对象
    • (四)类内声明类外实现
    • (五)涉及到的多文件编程
    • (六)对比C++类和结构体的区别
  • 三、类中的构造函数
    • (一)概念
    • (二)语法格式
    • (三)构造函数的调用时机
      • 1. 栈区对象
      • 2. 堆区对象
    • (四)构造函数的初始化列表
    • (五)类中包含类 类型成员
  • 四、类中的析构函数
  • 五、类中的拷贝构造函数
  • 六、类中的拷贝赋值函数

一、概念

面向对象的四大特征:
封装、继承、多态、抽象

二、类的定义

(一)声明一个类类型的语法格式:

class 类名{//访问控制权限//类中的成员(成员函数和成员变量)
};
  • 注:
  • 类最后的分号不可丢;
  • 类中的访问控制权限只是起到一个标识作用,不占类的空间
  • 成员函数属于类,但是不占类的空间,没分配内存
  • 如果是一个空类,空类的大小占1个字节;如果类中有成员,那么这1个字节的大小就不算了

(二)类中的访问控制权限

class 类名{public:公有权限既可以在类内进行访问,也可以在类外进行访问在子类中也可以访问private:私有权限私有权限的成员只能在类内进行访问,不能再类外进行访问在子类中也不可以进行访问protected:受保护权限受保护成员只能在类内进行访问,不能再类外进行访问在子类中也可以访问
};
  • 注:
  • 访问控制权限在类中可以有多个,但是一般写一个
  • 如果没有访问控制权限,默认是私有权限(private)
  • 如果类中的私有权限成员和受保护权限成员想要在类外进行访问
    需要通过公有权限成员函数进行操作;
  • 访问控制权限可以写多个,但是使用时一般写一个

(三)实例化对象

1. 栈区对象

类名 对象名;

2. 堆区对象

类名 *对象名 = new 类名;

(四)类内声明类外实现

需要在类外实现时


(五)涉及到的多文件编程

(六)对比C++类和结构体的区别

类的默认权限时私有的,结构体的默认权限是共有的;
如果需要定义一个数据结构,不需要封装,也没有复杂的继承关系,可以使用结构体;

三、类中的构造函数

(一)概念

构造函数是类中一个特殊的成员函数;构造函数会自动调用;

构造函数是用来申请资源,完成对类中的成员变量进行初始化工作;

(二)语法格式

class 类名{类名(){...} //构造函数
};
  • 注:
  • 构造函数的函数名和类名一致
  • 构造函数没有返回值类型

(三)构造函数的调用时机

1. 栈区对象

在实例化对象时进行调用
类名 对象名 = 类名(传递的实参);
类名 对象名(传递的实参);
类名 对象名 = 传递的实参;

  • 注:第三种方式只能传递一个实参

2. 堆区对象

在new对象时进行调用
语法格式:
类名 *对象名 = new 类名(传递实参);

  • 注: 当实例化对象和new对象时,构造函数会自动调用,且仅调用一次,在后面的操作中不能在进行显式地调用。
  • 当没有提供自己写的构造函数,会调用编译器提供的缺省的构造函数,编译器提供的构造函数是无参构造函数;当提供了自己写的构造函数,就会使用自己提供的构造函数
  • 不同版本的构造函数会构成重载关系;
  • 构造函数的参数可以是缺省参数或者哑元参数。

(四)构造函数的初始化列表

在实例化对象的时候,同时给类中的成员变量进行初始化。

类中写有参构造函数时,最好用初始化列表,效率相对高一点

以下场合是必须要使用初始化列表的情况:
类中的成员变量的名称和构造函数的形参一样时,必须使用初始化列表
当成员变量中有引用时,必须在初始化列表中进行初始化工作
当成员变量有const属性时,必须在初始化列表中进行初始化工作

(五)类中包含类 类型成员

构造函数调用顺序:
先调用的是成员对象的构造函数,再调用当前对象的构造函数;

四、类中的析构函数

五、类中的拷贝构造函数

六、类中的拷贝赋值函数

http://www.lryc.cn/news/383791.html

相关文章:

  • Batch入门教程
  • 49-2 内网渗透 - 使用UACME Bypass UAC
  • Django 表单使用示例:数据格式校验
  • OkHttp框架源码深度剖析【Android热门框架分析第一弹】
  • 【MySQL】数据库——备份与恢复,日志管理1
  • 什么样的企业适合SD-WAN网络专线?
  • 已解决java.security.GeneralSecurityException: 安全性相关的通用异常的正确解决方法,亲测有效!!!
  • 秋招Java后端开发冲刺——非关系型数据库篇(Redis)
  • 个人对JVM的一点理解
  • Flutter【组件】可折叠文本组件
  • 内容安全复习 7 - 对抗攻击与防御
  • 淘宝店铺商家订单API-接入ERP,多平台订单同步的利器
  • 【微前端-Single-SPA、qiankun的基本原理和使用】
  • 多元化功能空间,打造影像产业生态圈
  • 华为鸿蒙正式杀入工业自动化,反攻开始了!
  • 学历优先还是专业优先?高考志愿填报的抉择
  • SpringAOP常用功能实现
  • Java基础的重点知识-04-封装
  • win7 的 vmware tools 安装失败
  • 【杂记-浅谈OSPF协议之IR、ABR、ASBR、BR】
  • element 问题整合
  • Linux下vi文件的时候替换指定的内容
  • 【知识学习】阐述Unity3D中MaterialTexture的概念及使用方法示例
  • java创建0byte的空文件
  • Qt 实战(6)事件 | 6.2、事件过滤器
  • 【PyTorch】【机器学习】图片张量、通道分解合成和裁剪
  • 如何提高工业交换机的电源功耗?
  • 源站静态文件更新后,CDN会自动刷新吗
  • Token的应用场景
  • 机器学习课程复习——奇异值分解