【C/C++】C++类与对象基本概念(抽象封装、类的定义与使用、构造函数、析构函数、静态成员、友元)

本文主要是介绍【C/C++】C++类与对象基本概念(抽象封装、类的定义与使用、构造函数、析构函数、静态成员、友元),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 七、类与对象基本概念
    • 7.1 抽象
    • 7.2 类的定义与声明
    • 7.3 访问控制
    • 7.4 类的实现与使用
    • 7.5 对象指针、this指针与对象引用
    • 7.6 构造函数
    • 7.7 析构函数
    • 7.8 拷贝构造函数
    • 7.9 类类型作为函数参数
    • 7.10 对象数组
    • 7.11 静态成员
    • 7.12 常对象与常成员(const)
    • 7.13 友元
    • 7.14 类的组合

七、类与对象基本概念

7.1 抽象

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
抽象是相对,而非绝对的
·在研究问题时,侧重点不同,可能会产生不同的抽象结果;解决同一问题时要求不同,也会产生不同的抽象结果。
-如果开发一个人事管理软件,那么关心的是员工的姓名、性别、工龄、工资、工作部门等相关信息。
-如果开发学籍管理软件,那么关心的是学生的姓名、性别、年龄、籍贯、所在学院等相关信息。

7.2 类的定义与声明

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.3 访问控制

类成员的访问控制

  • 什么是“类内”和“类外”
    在类声明之内称为类内
    在类声明之外称为类外

  • 数据封装的目的就是信息隐蔽。为了达到信息隐蔽,在C++类中,并非所有的成员都是对外可见的(或者说,是类外可以访问的)。

  • 通过设置成员的访问控制属性来实现对类成员的访问控制。这些控制属性有: public、protected、private

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.4 类的实现与使用

实现一个类,就是按照所设定的功能语义去实现类中的每一个成员函数。

class Clock{private:int hour,minute,second;public:void setTime(int h,int m,int s){hour = h;minute = m;second = s;}void ShowTime(){cout<<"Current Time:";cout<<hour<<":"<<minute<<":"<<second<<endl;}
};

在类内实现成员函数,编译器按内联函数处理。

或者在类外实现成员函数

class Clock{private:int hour,minute,second;public:void setTime(int h,int m,int s);void ShowTime();
};void Clock::setTime(int h,int m,int s){hour = h;minute = m;second = s;
}
void Clock::ShowTime(){cout<<"Current Time:";cout<<hour<<":"<<minute<<":"<<second<<endl;
}

在C++中,类成员函数可以在类定义内部实现,也可以在类定义外部实现。在类内实现成员函数通常是内联函数,而在类外实现需要在类的头文件中声明函数,并在一个源文件中定义这些函数。

在这里插入图片描述
在这里插入图片描述

#include <iostream>
using namespace std;class Clock{private:int hour,minute,second;public:void setTime(int h,int m,int s);void addHour(int h);void addMinute(int m);void addSecond(int s);void ShowTime();
};void Clock::setTime(int h,int m,int s){hour = h;minute = m;second = s;
}
void Clock::addHour(int h){hour += h;
}
void Clock::addMinute(int m){minute += m;
}
void Clock::addSecond(int s){second += s;
}
void Clock::ShowTime(){cout<<"Current Time:";cout<<hour<<":"<<minute<<":"<<second<<endl;
}int main()
{Clock clock_1,clock_2;clock_1.setTime(9,5,25);clock_2.setTime(15,16,45);clock_1.addHour(3);clock_2.addMinute(8);clock_1.ShowTime();clock_2.ShowTime();return 0;
}

注意:每个对象各自包含了类中定义的各个数据成员的存储空间,但它们共享类中定义的成员函数。

总结:定义和使用类类型的过程
·抽象∶对事物进行抽象
·声明类:根据抽象的结果定义类的特性
·实现类:实现类中成员函数的逻辑
·使用类∶在程序中定义类的实例,使用类的公有成员。

在使用的过程中,有需要注意的地方
在这里插入图片描述
在这里插入图片描述
都不行!!!

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.5 对象指针、this指针与对象引用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.6 构造函数

在这里插入图片描述
在这里插入图片描述
函数名和类名相同,没有返回类型,可以有参数。
当创建类的一个新对象时,构造函数被自动调用,完成对象的初始化工作。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.7 析构函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.8 拷贝构造函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.9 类类型作为函数参数

在这里插入图片描述
在这里插入图片描述
这里有大量的时间和空间上使用,效率较低!

在这里插入图片描述
只有一次空间的分配,没有参数传递,效率高!
在这里插入图片描述
对象指针需要传递对象地址!

7.10 对象数组

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.11 静态成员

当用关键字static说明一个类成员时,该成员称为静态成员。
静态成员分为︰

  • 静态数据成员
  • 静态成员函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.12 常对象与常成员(const)

  • 如果某个对象不允许被修改,则该对象称为常对象。C++用关键字const来定义常对象。
  • const也可以用来限定类的数据成员和成员函数,分别称为类的常数据成员和常成员函数。
  • 常对象和常成员明确规定了程序中各种对象的变与不变的界线,从而进─步增强了C++程序的安全性和可控性。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.13 友元

友元关系
封装的目的就是为了实现信息隐蔽。
一个对象的私有成员只能被自己的成员访问到。当类外的对象或函数要访问这个类的私有成员时,只能通过该类提供的公有成员间接地进行。
C++提供了友元机制来打破私有化的界限,即一个类的友元可以访问到该类的私有成员。

在这里插入图片描述
在这里插入图片描述
缺点:因为类外函数是不能直接访问类中的私有成员的,因此该函数必须调用GetX和GetY公有成员函数先获取“点”的坐标,然后再计算两点距离,这种方式是不太方便的。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
对友元关系的总结
友元具有如下的性质∶
类的友元可以直接访问它的所有成员。
友元的声明必须放在类的内部,但放在哪个段没有区别。
友元关系不具备对称性,即X是Y的友元,但Y不一定是X的友元。
友元关系不具备传递性,即X是Y的友元,Y是Z的友元,但X不一定是Z的友元。

7.14 类的组合

一个类的对象作为另一个类的成员,这体现的是整体和部分的关系,即对象的包含关系,这个作为成员的对象被称为子对象。

在这里插入图片描述
在这里插入图片描述
若子对象对应的类的构造函数有参数,那么包含该子对象的类必须使用表达式的方式先初始化子对象。

后面章节陆续更新,点赞越多更新越快,欢迎各位的关注~

专栏合集:
【C/C++】C语言程序设计基础知识(数据类型与表达式、控制语句、数组与结构)
【C/C++】C语言程序设计基础知识(指针、函数)
【C/C++】C++程序设计基础(输入输出、数据类型、动态内存、函数重载、内联函数、常量、引用)

声明:仅供学习参考使用,不另做他用,侵删

请添加图片描述

这篇关于【C/C++】C++类与对象基本概念(抽象封装、类的定义与使用、构造函数、析构函数、静态成员、友元)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1120706

相关文章

C++中RAII资源获取即初始化

《C++中RAII资源获取即初始化》RAII通过构造/析构自动管理资源生命周期,确保安全释放,本文就来介绍一下C++中的RAII技术及其应用,具有一定的参考价值,感兴趣的可以了解一下... 目录一、核心原理与机制二、标准库中的RAII实现三、自定义RAII类设计原则四、常见应用场景1. 内存管理2. 文件操

C++中零拷贝的多种实现方式

《C++中零拷贝的多种实现方式》本文主要介绍了C++中零拷贝的实现示例,旨在在减少数据在内存中的不必要复制,从而提高程序性能、降低内存使用并减少CPU消耗,零拷贝技术通过多种方式实现,下面就来了解一下... 目录一、C++中零拷贝技术的核心概念二、std::string_view 简介三、std::stri

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五