面向对象(OOP)思想和类(2)

科研软件|Adobe Photoshop 2024 (PS 2024) 阅读详情

(一)类的6个默认成员函数
1.构造函数
1.用处:用于初始化类的成员
语法
class Date{
Date()
{}
};
事实上这就完成了一个简单的构造函数,也就是传说中的无参构造
当创建Date类型的对象时候,编译器会自动调用构造函数,并且在整个对象的生命周期内只会调用一次
当然构造函数也有许多自己的特性,我在这里罗列一下
需要注意的是:构造函数并没有创造对象,只是完成对创建出来对象的初始化
构造函数的特性:
(1) 函数名与类名相同
(2)无返回值
(3)当对象实例化时编译器自动调用对应的构造函数
(4)构造函数支持重载
举个栗子
class Date{
public:
Date(){
_year=1;
_month=month;
_day=day;
}//无参构造
Date(int year,int month,int day)
{
_year=year;
_month=month;
_day=day;
}
//带参构造
private:
int _year;
int _month;
int _day;
};
void test()
{
Date d;//这里会调用无参构造
Date d1(1,2,3);//这里会调用带参构造
}
事实上当我们自己不去定义构造函数的时候,编译器会为我们自动生成一个无参的构造函数,而当我么自己取定义了构造函数时,编译器不会再生成
默认构造函数:
1.无参构造函数
2.全缺省构造函数
3.编译其默认生成的构造函数
事实上这里有个坑
我们看以下的代码
class Date{
public:
Date()
{}
Date(int year=1,int month=2,int day=3)
{
_year=year;
_month=month;
_day=day;
}
private:
int _year;
int _month;
int _day;
};
void test()
{
Date d;
}
事实上这里的编译是过不了的
为什么呢?
事实上我在上一张的面向对象和类的入门介绍中说过
永远不要让编译器去做判断!!
不要让它去做选择题
这里定义的d对象到底是应该调用Date()还是Date(int year=1,int month=2,int day=3)
这就是在给编译器出选择题
当然,编译器是不容许这么搞的
这里再说一个小插曲
在定义类成员变量的时候,定义的标识符尽量不要和普通的变量名一样,不然就会出现极为尴尬的情况
比如
class Date{
public:
Date (int year,int month ,int day)
{
year=year;
month=month;
day=day;
}
private :
int year;
int month;
int day;
};
这样搞就非常的生硬了
我的解决方法是定义的时候这样写
class Date{
private :
int _year;
int _month;
int _day;
};
这样就可以避免尴尬的
当然你也可以用别的方法(只要你的脑洞足够大就好)
2.析构函数
用处:在对象生命周期的时候清理资源
但是绝对不是销毁对象!!
特征:
1.析构函数的定义就是在类名前边加~
2.无参数无返回值
3.一个类只有一个析构函数,当然如果你不显式定义编译器也会自动生成
4.对象生命周期结束的时候编译器会自动调用
还是举个栗子
class Date()
{
public:
~Date ()
{}
这就是个析构函数
private:
int _year;
int _month;
int _day;
};
3.拷贝构造函数
事实上,这也是个构造函数
如果你仔细研究它只是构造函数的一个重载
我还是举个栗子
class Date{
public:
Date(Date& d)
{
_year=d._year;
_month=d._month;
_day=d._day;
}
private:
int _year;
int _month;
int _day;
};
这里要注意的是传参必须去传引用,不然就会引起无限递归
为啥呢
我们知道函数传参如果不传引用的话
在底层时间上是把实参拷贝一份作为形参放过去,那么这个拷贝过程就会又调用拷贝构造函数,从而形成无限递归
事实上如果不显示的去写拷贝构造,编译器会自动生成一个拷贝构造函数
但是这个拷贝构造只会完成浅拷贝(字节拷贝)
当遇到需要深拷贝的情形时,事实上这是极为尴尬的
举个栗子:
class String{
String()
{
_s=nullptr;
}

~String()
{
free(~s)
}
private:
char *_s;
}
void test()
{
String s1;
String s2(s1);
}
有没有发现问题呢
s1把_s的地址给了s2,因此事实上s2并没有创建出新的空间
当s1和s2生命周期结束的时候,会自动调用析构函数
这意味着s1指向的那块内存被释放了2次(极为尴尬)
因此这个程序就会GG
3.运算符重载
C++为了增强代码的可读性而设计的,其实和普通的函数并无过大区别
使用方法: operator后面加需要重载的运算符号
注意事项:
1.不能通过连接其他符号来创建新的运算符 比如operator@
2.重载函数操作符必须有一个类类型或者枚举类型的操作数(就是自定义类型)
3.用于内置类型的操作符号,其意义不能被改变,比如a+bn你不能让他是a乘b
4.作为类成员函数的时候,其形参看起来比实际操作数少一
其实很简单,类成员函数的第一个参数势必是this
5…丶sizeof丶?: 丶.五个运算符不能被重载(这个实际上也不用记忆,弄懂了他们的用途你就知道它为什么不能被重载)
至于这个东西的使用方法,你可以看我的博客那个Date类,这里不赘述
4.const成员函数
用const修饰的类成员函数事实上是修饰隐含的this指针,表面this指针指向的内容在该函数内部不能被修改
比如
class Date{
public :
void printfDate()const
{
cout<<_year<<month<<day<<endl;
}
private:
int _year;
int _month;
int _day;
};
这里函数体后边的const实际上是给this 加的把this 变成const Date * const this 这个类型
5.取地址及const取地址操作符重载
举个栗子一看就懂
class Date{
public :
Date
operator&(){
return this;
}

const Date* operator&()const
{
return this;
}
};
这两个运算符一般不使用重载,使用编译器默认的重载即可,当然如果你只想让人家获取部分内容,可以自己定义,事实上,如果你可以这么搞,你已经买入了另外一闪门(is hk)

vxWorks下dosFs文件系统的创建 文件系统,是指操作系统根据目录和文件的组织形式在磁盘设备上应用的一种设备驱动,不同的文件系统对目录和文件有不同的限制(如目录名限制,文件大小限制等)。VxWorks支持多种文件系统,比较重要的有:1、dosFs:适用于块存取设备(比如硬盘、软盘),和MS-DOS文件系统兼容;2、rawFs:提供了一种简单的原始文件系统。该文件系统将整个硬盘当作一个单独的大文件;3、cdromFs:允许系统从按照I 阅读详情

相关推荐

基于微信小程序的扫码签到系统源码

大等于jdk1.8,大于mysql5.5,idea(eclipse),微信开发者工具。代码注释齐全,没有多余代码,适合学习(毕设),二次开发,包含论文技术相关文档。签到管理:新增签到,点击查看码展示二维码(有时效性)springboot mybatis 小程序。签到管理:查看用户创建的签到,可删除。用户管理:查看注册用户信息,及删除。签到记录:查看用户签到记录:可删除。个人信息:展示个人信息,可修改。统计分析:查看用户,签到数量。签到记录:查看用户签到记录。登录注册(含授权登录)我的签到:查看签到记录。

wfuhui的博客 5224

2017级面向对象程序设计寒假作业2

Deadline:2018.02.11 22:00 pm 第一次的寒假作业,开启了大家的寒假生活,转眼回到了“小学生作文题”的感觉。不知道是否也通过这次作业,将你的回忆时光拉回到了几年前或十年前,沉思回忆代替了纷扰的知识。很多同学回忆了小学、中学的课任老师,或书法、绘画的老师。无论他们是严厉还是宽容,是鸡汤还是淡定,都或多或少的影响或潜移默化改变着你。在经过一次时光超越后,书归正传,我们开启编码的...

weixin_30487317的博客 183

STM32F030F4P6 ADC多通道定时器触发DMA搬运

主函数中等待转换完成的标志位,然后打印出来。ADC回调函数中将数值赋值给变量。配置定时器1s读一次。

qq_24426625的博客 1356

[ C++ ] 带你一篇了解什么是OOP(面向对象编程),什么是封装? -- 类与对象(上)

学习过C语言的小伙伴知道:C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 面向过程编程也叫结构化编程。虽然结构化编程的理念提高了程序的清晰度,可靠性,并且方便维护。但它再编写大型的程序时,仍然面临这巨大的挑战,OOP(面向对象编程)提供了一种新的方法。与强调算法的过程性编程不同的是,OOP强调的是数据。--引自《C++ Primer Plus(第六版)》 1.面向对象编程 C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。

优快云博客 5476

Unipush2.0 App消息推送(在线+离线推送)

使用unipush2.0进行消息推送,包含在线跟离线

weixin_50251467的博客 3699

2024东南大学533复试C++程序设计笔试真题精讲

【东南553复试C++】2024东南大学533复试C++程序设计笔试真题精讲

转遍世界 3415

java基础知识(oop面向对象基础知识点(全))

类和对象 对象:软件中存在的单个个体 类:对象的模板,根据对象的属性抽取类的数据结构 定义类 定义类的成员变量 类的定义包括"成员变量"的定义和"方法"的定义,其中"成员变量"用于描述该类型对象的共同的数据结构. 对象创建后,其成员变量可以按照默认的方法初始化 初始化对象成员变量时,其默认值八大基本类型为0,boolean为false,引用类型为null 定义类的方法 类中除了定义成员变量,还可以定义方法,用于描述对象的行为,封装对象的功能. 创建并使用 使用new关键字创建......

Theshy08的博客 1491

Ubuntu下为RK3568开发板搭建Qt交叉编译环境:手把手教你配置Qt Creator和远程调试

本文详细介绍了在Ubuntu系统下为RK3568开发板搭建Qt交叉编译环境的完整流程,包括工具链配置、Qt源码交叉编译、Qt Creator环境设置以及远程调试技巧。通过手把手教程,开发者可以快速掌握RK3568平台的Qt开发环境搭建方法,实现高效的应用开发和部署。

weixin_30776273的博客 374

【ROS2机器人入门到实战】OOP介绍

除了使用上节中的只定义一个main函数就完成编写一个Python节点外,还有另外两种方式。本节小鱼就来讲一讲出现么多种编写节点的原因,并对其中较为重要的OOP方法进行介绍。

生活不止眼前的苟且 5233

基于STM32、HAL库的MCP4013T-103E/CH 数字电位器驱动程序设计

define MCP4013_I2C_ADDR (0x5F << 1) // HAL库使用7位地址左移1位,或直接使用0xBE/0xBF。#include "i2c.h" // 包含你的I2C初始化相关的头文件,例如由CubeMX生成的 i2c.h。大于127的值会被截断。// MCP4013的读操作:主机发起读取请求,从机返回当前滑片位置的一个字节。// 使用HAL_I2C_Master_Transmit直接发送数据。// 使用HAL_I2C_Master_Receive读取一个字节。

corlin6688的博客 126

Vue2 - 最新详细实现网站内部打开预览 office 全套附件,在页面弹窗内解析预览 word文档、excel电子表格、ppt演示文稿(docx|xlsx|pptx|pdf|txt等文件)详细代码

vue2,nuxt2,office,文档,文件,查看预览,弹框预览,下载预览,如何预览pdf文档,打开查看,office全套文档,实现在线预览文件,小程序内预览word文件,手机h5移动端网页,nuxt文档在线预览,预览office最好用的插件,下载查看,Office在线预览,vue-office,vue如何使用vue-office教程示例,word文档,ppt,exce表格,预览电子文件,文档无法解析,打不开,报错,失效,保存下载,vue前端预览并下载doc、xls、pdf、txt及图片,vue2中预览p

🏆 前端领域优质创作者 1万+

《动手学ROS2》3.5.3OOP介绍

本系列教程作者:小鱼 公众号:鱼香ROS QQ交流群:139707339 教学视频地址:小鱼的B站 完整文档地址:鱼香ROS官网 版权声明:如非允许禁止转载与商业用途。 3.4.3 OOP介绍 除了使用上节中的只定义一个main函数就完成编写一个Python节点外,还有另外两种方式。 本节小鱼就来讲一讲出现么多种编写节点的原因,并对其中较为重要的OOP方法进行介绍。 要做机器人离不开计算机编程,而计算机编程经过多年的发展,演变出了三种不同且常用的编程思想,分别是: 面向过程编程思想。缩写:POP 面.

生活不止眼前的苟且 774

Ubuntu Rtx3090 Cuda11.7 安装 pytorch3d

pytorch ubuntu pytorch3d 安装

G果的博客 2273

面向对象思想---类与对象

面向对象思想 面向对象思想概述 Java语言是一门面向对象的程序设计语言。面向对象思想是一种程序的设计思想。我们在面向对象思想的指引下,使用Java语言去设计程序、开发程序程序。这里的【对象】泛指现实中的一切事物,每种事物都有自己得【属性】和【行为】。面向对象思想就是在程序设计过程中,参照现实中的事物,将事物的【属性特征】、【行为特征】抽离出来,描述成计算机事件的设计思想。它是区别于面向过程,强调事物的行为去一步步执行的功能。 面向过程与面向对象思想的区别 面向过程 : 强调步骤 面向过程:强调对象,   

qq_44728727的博客 387

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Java面向对象OOP思想概述

Java设计思想OOP思想(Object Oriented Programming)类和对象接口抽象类OOP三大特性封装继承多态OOP复用的形式 OOP思想(Object Oriented Programming) 类和对象 在面向对象中,类和对象是最基本、最重要的组成单元 类:类可以说是一个模板,它描述了一类对象的行为和状态 对象:对象是类的一个实例,有对应的状态和行为 类是做什么用的呢:模拟现实,封装数据和代码 假如说生活中常见的动物狗,它也可以说是一个类,那么具体的对象例如:中华田园犬、哈士奇、哈巴狗

狐言 1237

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

面向对象编程思想OOP

OOPOOP概念类的基本实现面向对象的三大特性类和对象的三种方法抽象类自定义类 OOP概念 OOP思想 Object Oriented Programming, 简称OOP,是一种程序设计思想 接触到任意一个任务,首先想到的是任务这个世界的构成,是由模型构成的 面向对象的实现过程: OOA(分析)-&amp;gt;OOD(设计)-&amp;gt;OOI(实现) 类和对象的概念 类:抽象名词,代表一个...

zhuix7788的专栏 552

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

JAVA 三大特性 OOP思想 面向对象思想

OOP:面向对象编程     OOP三大特征(记住):         封装、继承、多态     面向对象的引入:         如果不同class(类)中,存在相同的函数(功能),在开发中这种编码方式会降低程序的编码效率、复用性降低。     之前函数,是把功能提取出来,是从class(类)中提取到函数;     为了解决编码效率低、复用性差:         把相同的功能(函数...

Smithereens的学习笔记 2590

【C++】oop(面向对象)思想

我们都知道C语言是面向过程的语言,C++是半面向对象的语言。 C语言中要实现一个功能的话就得将功能拆分成一个一个小的模板,模块中实现功能的时候是通过函数实现的,这就是所谓的模块化语言,它会形成函数调用链,然后最终形成最后的功能。 C++是面向对象的语言,那它到底是怎样实现的呢?第一个就是所谓的oop思想 一、oop思想 1、计算机语言的设计目的和意义 模拟现实。通过计算机语言实现现实中的问题 2、oop思想用图表示为: opp思想简单来说就是将属性和行为结合起来 二、代码实现计算机与现实世界的转换 例如:

qq_43411563的博客 1336

面向对象编程(OOP):Java 的核心思想(详细笔记)

面向对象编程(Object-Oriented Programming,OOP)是Java的核心设计思想,它将现实世界中的“事物”抽象为“对象”,通过“类”定义对象的共性,以“封装、继承、多态”三大特性实现代码的可复用、可维护、可扩展。核心逻辑:将问题拆解为“对象”,通过对象之间的“交互”完成功能,而非像“面向过程”那样按步骤编写指令。**对象(Object)**是程序的基本单元,它是对现实世界中具体实体的抽象和模拟。

weixin_70530563的博客 1188

什么是OOP面向对象思想?

面向对象编程(OOP)是一种以对象为核心的编程范式,广泛应用于Java、C++、Python等语言。OOP通过模拟现实世界的对象与行为,使程序结构更加模块化、可维护和可复用。其核心特性包括封装、继承和多态。封装通过将数据和行为绑定在一起,隐藏实现细节,提高安全性;继承允许子类复用父类的属性和方法,建立类型体系;多态使对象能够表现出多种形态,增强灵活性。此外,抽象和接口与实现分离进一步提升了OOP的设计能力。相比面向过程编程,OOP更易于维护和扩展,降低了耦合度。Java通过修饰符、继承、多态、抽象类和接口等

weixin_46072507的博客 929

OOP思想与Java实现

大纲: 《Java编程思想》第一章对象导论摘录 OPP的基本思想 OPP与面向过程的区别 OPP解决了什么问题 Java中的OPP表现 OPP为面向对象编程,其重点是“对象”上面,什么是对象?自然界中的一切物体,例如猫,狗,花,草等等都是对象,而面向对象编程就是一人看世界的角度来进行编程。一只猫是怎么样的?毛色是黑色的还是黄色的?体重多少?体长多少?这些在人类社会中的“名词”,用来描述

WuSicheng的博客 3754

OOP思想 (面试!)看这篇就够了

写在前面 Python是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言,具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。但是在我们享受Python带来的编程乐趣之前,就必须要掌握OOP(Object Oriented Programming)面向对象程序设计思想,这样才能够更好的应用Python高级功能。下面和我一起全面的学...

weixin_43095575的博客 1917

【Python 面向对象】面向对象[OOP]基本概念,类和对象

【Python 面向对象】面向对象[OOP]基本概念,类和对象1. 初识面向对象1.1 过程和函数1.2 面相过程 和 面相对象 基本概念2. 类和对象的概念2.1 类2.2 对象2.3 类和对象的关系2.4 类的设计2.4.1 类名的确定2.4.2 属性和方法的确定 面向对象编程 —— Object Oriented Programming 简写 OOP 1. 初识面向对象 1.1 过程和函数 ...

来日浅谈的博客 622

面向对象思想——oop

面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。这样做主要是为了“模拟现实”; Object Oriented是建立在“对象”概念基础上的方法学。对象是由数据(成员变量)和允许的操作(成员方法)组成的封装体,与客观实体有直接对应关系,一个对象类定...

G小胖的博客 442

Python函数式编程与面向对象编程的思想(OOP)转变

函数式编程能实现的,OOP都可以满足。函数式编程的思想主要为:先编好一个个我们需要的具有特定功能的函数,然后再声明(Python 只用把所要用的函数全部写在最前面即可),比如 C 或者一些其他面向过程的程序设计语言,写完函数就需声明。 接下来我就用多个简单的实例,来个大家展现两种不同的"编程思想" 来实现相同的功能   两段程序都将实现同一个目的,也就是打印下面这句话:     一...

欢迎来到Gorit的博客 2092

OOP思想

面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。 核心思想:封装,继承,多态. OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。 OOP 主要有以下的概念和组件:...

weixin_43969584的博客 531
上一篇: 实现日期类
下一篇: 自治日历
ldbite
博客等级 码龄7年 17粉丝 195原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值