iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++类与对象的详细说明2
  • 465
分享到

C++类与对象的详细说明2

2024-04-02 19:04:59 465人浏览 薄情痞子
摘要

目录类的默认成员函数构造函数概念特性析构函数概念特性拷贝构造函数概念特征赋值运算符重载运算符重载赋值运算符重载取地址及const取地址操作符重载总结类的默认成员函数 每个类中,如果不

类的默认成员函数

每个类中,如果不主动实现默写特定函数,类中也会自动去生成这些函数,它们就是默认成员函数。默认成员函数分为六种,它们是特殊的成员函数,如果我们不实现,编译器会自己实现。

下面将对这些函数一 一进行介绍。

构造函数

概念

构造函数的作用即为初始化,相当于平时我们自己写的Init函数,但在对象实例化时会自动调用,以保证实例化对象一定初始化。

特性

(1)函数名与类名相同

如日期类Date,其构造函数名也为Date

(2)无返回值

以日期类为例,其构造函数的声明和定义可以写成如下样子:

class Date{public:Date(int year = 0, int month = 1, int day = 1);private:int _year;int _month;int _day;};class Date
{
public:
	Date(int year = 0, int month = 1, int day = 1);
private:
	int _year;
	int _month;
	int _day;
};
Date::Date(int year, int month, int day)
{
	_year = year;
	_month = month;
	_day = day;
}

(3)对象实例化时编译器自动调用对应的构造函数

为了验证这一点,我们创建一个对象,但不对其进行其它操作:

int main()
{  
	Date date1;
	return 0;
}

 通过调试可以发现对象date1已经被自动初始化了。

(4)构造函数可以重载

(5)如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦用户显式定义,编译器将不再自动生成。

(6)无参的构造函数和全缺省的构造函数都称为默认构造函数,并且默认构造函数只能有一个。

针对第五点,我们不免会发出疑问,编译器自动生成的默认构造函数究竟干了什么呢?

首先,需要先了解c++把类型分为两类:内置类型(基本类型)和自定义类型。

内置类型就是C语言自带的类型,如int、char、double、指针、内置类型的数组;而自定义类型就是strucrt和class定义的类型。

编译器默认生成的构造函数,对于成员变量中的内置类型不做初始化,对于自定义类型成员变量则会调用它的默认构造函数初始化,如果没有默认构造函数则会报错。

析构函数

概念

析构函数的功能是完成对象中资源的清理。虚构函数会在对象的生命周期到了之后调用。

特性

(1)析构函数名是在类名前加上字符~。

(2)无参数无返回值。

日期类析构函数的声明可以写成如下形式:

~Date();

(3)一个类有且只有一个析构函数。若喂显式定义,系统会自动生成默认的析构函数。

(4)对象生命周期结束时,C++编译系统自动调用析构函数。 

对于编译器自动生成的默认析构函数,与构造函数类似,对于内置类型成员变量不做处理;对于自定义类型成员变量会去调用它的构造函数。

拷贝构造函数

概念

拷贝构造函数用于使用同类型对象去初始化实例对象。

特征

(1)拷贝构造函数是构造函数的一个重载形式。

(2)拷贝构造函数的参数只有一个且必须使用引用传参,使用传值的方式会引发无穷递归调用。

日期类拷贝构造函数的声明需要写成如下形式:

Date(Date& date);

为什么必须采用引用传参呢?引发无穷递归又是怎么一回事呢?

不妨来思考一下,传参实际上也是对内容进行临时拷贝,将实参传给形参本身就需要调用拷贝构造。由此一来,会导致不断调用拷贝构造,造成无穷递归调用。

(3)若未显式定义,系统会生成默认的拷贝构造函数了。

默认拷贝构造函数对于内置类型成员,会完成按字节序的拷贝(浅拷贝),如果需要深拷贝则需要自己写拷贝构造函数;对于自定义类型成员,则会调用它的拷贝构造函数。

所谓按字节序拷贝指将内存中的内容照搬照抄,复制过来。在一些情况下就会出错,如存放申请内存地址的指针,如果按字节序拷贝,会导致两个对象中的成员变量指向同一块空间,在析构时会导致同一块空间释放内存多次,引发错误。

赋值运算符重载

运算符重载

在谈及赋值运算符重载前,必须先来讲一讲运算符重载。

我们知道,对于int类型,是可以进行加减乘除等运算的。但对于自定义类型,能否实现加减乘除运算呢?这就需要运用到运算符重载了。

运算符重载是具有特殊函数名的函数。函数名字为:operator操作符(参数列表)

注意:一些运算符不支持重载,即:.*、::、sizeof、?:、.

以Date类==运算符重载为例,需要将函数作为成员函数,以便于访问成员变量:

class Date
{
public:
	Date(int year = 0, int month = 1, int day = 1);
	bool operator==(Date& date)const;
private:
	int _year;
	int _month;
	int _day;
};
bool Date::operator==(Date& date)const
{
	return _year == date._year
		&& _month == date._month
		&& _day == date._day;
}

赋值运算符重载

赋值运算符重载顾名思义,是对赋值运算符进行的重载,用于两个已经存在的对象进行赋值拷贝。

赋值运算符重载有四个要点:

(1)参数类型

(2)返回值

(3)检测是否自己给自己赋值

(4)返回*this,用于连续赋值

一个类如果没有显式定义赋值运算符重载,编译器会自己生成一个,对于内置成员,完成按字节序拷贝;对于自定义成员变量,会调用它的赋值运算符重载。

取地址及const取地址操作符重载

这两个运算符一般不需要重新定义,使用编译器生成的重载即可,只有特殊情况才需要重载,如不希望自己特定的内容被别人访问时。

总结

篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容! 

--结束END--

本文标题: C++类与对象的详细说明2

本文链接: https://www.lsjlt.com/news/139571.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++类与对象的详细说明2
    目录类的默认成员函数构造函数概念特性析构函数概念特性拷贝构造函数概念特征赋值运算符重载运算符重载赋值运算符重载取地址及const取地址操作符重载总结类的默认成员函数 每个类中,如果不...
    99+
    2022-11-13
  • C++类与对象的详细说明
    目录类的引入类的定义1、声明和定义全部放在类体中2、声明放在头文件,定义放在源文件中类的访问限定符号及封装访问限定符封装类的实例化类对象模型this指针this指针的特性总结类的引入...
    99+
    2022-11-13
  • Java类与对象详解(2)
      this引用 为什么要有this引用 先来看一个日期类的例子: ​public class Date { public int year; public int month; public int day; /...
    99+
    2023-09-01
    java 开发语言
  • 详解C++之类和对象(2)
    目录一.构造函数1.构造函数的定义:2.构造函数的特征:3.构造函数的实现:3.1.系统默认的构造函数3.2无参构造3.3 带参构造二 析构函数1.析构函数的定义2.析构函数的特征三...
    99+
    2022-11-12
  • Java 类与对象详细
    目录1.类2.对象3.练习 4.练习答案 前言: 早期的Java语言,是面对过程的语言(面向过程指把一个场景分割成一个个的步骤研究),如今的Java已经是面对对象的语言(面向对象指把...
    99+
    2022-11-12
  • C++类与对象的基础知识点详细分析
    目录一、什么是类和对象呢1、类的引入2、类的定义3、类的访问限定符4、类对象的储存方式5、this指针的特性二、类的六个默认成员函数详解1、构造函数2、析构函数一、什么是类和对象呢 ...
    99+
    2023-02-13
    C++类与对象知识点 C++类与对象关系
  • C++类与对象的重点知识点详细分析
    目录一、类的六个默认成员函数详解1、拷贝构造1.1 拷贝构造的引入及概念1.2 拷贝构造函数的特征2、赋值运算符重载2.1 运算符重载2.2 赋值运算符重载3、普通对象取地址4、co...
    99+
    2023-02-13
    C++类与对象知识点 C++类与对象关系
  • C++OOP对象和类的详细讲解
    目录C++OOP对象和类1.预备知识2.抽象和类2.1 数据抽象2.2 类2.3 接口3.C++中的类和对象3.1 C++类的定义3.2 C++对象的定义3.3 C++访问数据成员3...
    99+
    2022-11-12
  • JVM的类加载过程详细说明
    目录一、基础知识二、加载三、验证四、准备五、解析六、核心阶段:初始化七、双亲委派机制八、总结一、基础知识 我们平时写的Java写代码一般都是.java文件,编译成为.class字节码...
    99+
    2022-11-12
  • Java对象与Java类的详细介绍
    本篇内容介绍了“Java对象与Java类的详细介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录面向对象是什么Java类什么是类Java...
    99+
    2023-06-20
  • C++的类与C#的类详细介绍
    本篇内容介绍了“C++的类与C#的类详细介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!许多编程人员学习C++总结经验为,有的觉得C++语...
    99+
    2023-06-17
  • C++static详解,类中的static用法说明
    目录C++static详解,类中static用法static特点:用来控制存储方式和可见性类中的static关键字什么时候用static?为什么要引入static?c++中stati...
    99+
    2022-11-13
  • C++11之std::future对象的使用以及说明
    目录std::future介绍细节说明wait系列操作get操作时序图std::future使用总结std::future介绍 在前面几篇文章中基本都用到thread对象,它是C++...
    99+
    2023-02-28
    C++11 std::future std::future对象 std::future对象使用
  • C++学习笔记之类与对象详解
    目录前言:1.访问限定符:【问题】C++中 struct和class的区别是什么?2.封装【问题】在类和对象的阶段,我们只研究类的封装特性,那什么是封装呢?3.类的定义与声明【问题】...
    99+
    2022-11-12
  • Pandas数据结构详细说明及如何创建Series,DataFrame对象方法
    目录1. Pandas的两种数据类型2. Series类型通过numpy array通过Python字典通过标量值(Scalar)name属性3. DataFrame类型通过包含列表...
    99+
    2022-11-12
  • C++详细讲解对象的构造
    目录一、对象的构造(上)1.1 对象的初始值1.2 对象的初始化1.3 小结二、对象的构造(中)2.1 构造函数2.2小实例2.3 小结三、对象的构造(下)3.1 特殊的构造函数3....
    99+
    2022-11-13
  • JavaScript 对象新增方法defineProperty与keys的使用说明
    目录一:Object.defineProperty() 1.1 参数说明1.2 第三个参数 descriptor 的说明1.3 实际使用1.3.1 wr...
    99+
    2022-11-13
  • C++类与对象之运算符重载详解
    目录运算符重载加号运算符重载左移运算符重载递增运算符重载递减运算符重载赋值运算符重载关系运算符重载函数调用运算符重载总结运算符重载 运算符重载概念:对已有的运算符重新进行定义,赋予其...
    99+
    2022-11-12
  • C++中对象与类的详解及其作用介绍
    目录什么是对象面向过程 vs 面向对象面向过程面向对象什么是类类的格式类的成员函数函数访问权限方法一方法二方法三inline 成员函数什么是对象 任何事物都是一个对象, 也就是传说中...
    99+
    2022-11-12
  • C++浅析类与对象的基础
    目录面向过程和面向对象类的引入访问限定符封装类的作用域类的实例化面向过程和面向对象 类和对象是 C++ 的核心特性 我们之前的C语言就属于面向过程,关注过程,分析求解问题的步骤再通过...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作