首页
学习
活动
专区
圈层
工具
发布

【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)

一、构造函数 构造函数的主要作用是:在对象被创建时,调用该函数对其成员变量进行初始化。就像我们在实现栈和队列时写的Init函数一样,会对它的成员先赋初值。 它的特点如下: 1....代码示例: #include using namespace std; class MyClass { public: //这里我们手动创建一个构造函数 MyClass(int...对于++和--运算符的重载,由于前置和后置无法区分,所以c++规定:对于后置++/--,需要在函数的参数中增加一个哑元(通常是int类型),这个参数不在函数体中使用,但是有了这个参数就表示重载的是后置+...赋值重载是运算符重载中的一种,必须重载为成员函数。一般情况下,它的参数和返回值都是当前类类型的引用,这样会减少拷贝提高效率。 2. 当我们没有显示写出赋值重载时,编译器会自动生成。...总结 今天我们学习了四个类的默认成员函数以及它们的特点、使用方法:构造函数、析构函数、拷贝构造函数和赋值重载,它们能够确保资源的正确管理和对象状态的正确维护。

1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java系列:构造函数重载和普通函数的那些事~

    类中可以有很多个构造函数,但我们知道它们函数中的参数是不一样的;多个构造函数加上构造函数的重载,这样可以衍生出很多个函数,当我们在初始化对象时,就可以表达出对象的多种初始化行为,这也是构造函数重载的一个作用...简单来说,我们通过构造函数的重载,可以用相同的方法名【和类名一致】(但参数列表不同),我们便可以实现不同的结果。...上面说完匿名构造函数和构造函数,似乎我们忘掉了普通函数,不捉急,这里我们就来说说普通函数,关于Java中的普通函数,和其他语言有一点点的不同,那就是Java中的函数不能单独存在,必须要定义在类体中。...jvm调用的 2.普通函数是由我们创建对象调用的 作用 1.构造函数的作用用于初始化一个对象 2.普通函数是用于描述一类事物的公共行为的 三.方法的重载和编译时多态 上面有构造函数的重载,这里普通函数也是不服了...关于普通函数的重载,和构造函数一样也是一个类中多个方法的名称相同,参数的列表不同,但返回值和修饰符不一样,普通函数的返回值类型和修饰符均无关。

    1K40

    11.6 C++构造函数重载

    C++用参数初始化表对数据成员初始化 在C++中,构造函数的函数可以通过体内赋值语句对数据成员实现初始化,C++还提供另一种初始化数据成员的方法,用参数初始化表来实现对数据成员的初始化。...这种方法不在函数体内对数据成员初始化,而是在函数首部实现,例如定义构造函数可以采用如下形式: Box::Box(int hgt,int wid,int len):height(hgt),width(wid...C++使用默认参数的构造函数 构造函数中参数的值既可以通过实参传递,也可以指定为某些默认值,即如果程序员不指定实参值,编译系统就使形参取默认值。...C++构造函数的重载 重载是指在一个类中可以定义多个构造函数,以便对类对象提供不同的初始化的方法,供程序员选用,这些构造函数具有相同的名字,而参数的个数或参数的类型不相同。...案例:C++求体积,要求体现重载。

    1.9K80

    带右值引用的拷贝构造函数和运算符重载函数

    考虑一个占用堆资源类对象的拷贝构造和赋值运算符重载函数,当我们用一个临时对象去拷贝构造一个新对象或者赋值给一个已经存在的对象时,会出现一下的问题:如string类 #include ...到这里就引出了第一个主题,带右值引用的拷贝构造函数。因为临时对象是右值。临时对象用完就要析构的,那就把临时对象占用的资源直接给新对象就好了。...这样做一方面避免了在原来拷贝构造函数需要首先申请空间,然后进行拷贝的麻烦。另一方面避免临时对象析构时还有释放堆资源的麻烦,一举两得!!!...} delete[] mptr; mptr = s.mptr; s.mptr = nullptr; return *this; } 结论: 至此,通过一个例子我们总结出了带右值引用的拷贝构造函数和运算符重载函数所带来效率的提升...在实际开发中,当出现一定要用临时对象作为返回值,要用临时来进行赋值时,我们可以为其类实现带右值引用的拷贝构造函数和运算符重载函数,在程序的效率上会得到很大的提升。

    1.1K20

    【C++】拷贝构造函数和赋值运算符重载详解

    在C++中,拷贝构造函数通常用于将一个对象的值复制到另一个对象中(一个对象存在,一个对象不存在),以便在程序中进行对象的赋值和传递操作时,能够确保对象的内容被正确复制。...⭐特征 拷贝构造函数也是特殊的成员函数,其特征如下: 拷贝构造函数是构造函数的一个重载形式。...⭐运算符重载 C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其 返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。...⭐前置++和后置++重载 在C++中,前置++和后置++运算符可以被重载为类的成员函数或全局函数。重载前置++运算符时,需要返回引用以允许连续的递增操作。...,故以引用方式返回提高效率 后置++: 前置++和后置++都是一元运算符,为了让前置++与后置++形成能正确重载,C++规定:后置++重载时多增加一个int类型的参数,但调用函数时该参数不用传递

    52310

    java构造代码块,构造函数和普通函数的区别和调用时间

    在这里我们谈论一下构造代码块,构造函数和普通函数的区别和调用时间。 构造代码块:最早运行,比构造函数运行的时间好要提前,和构造函数一样,只在对象初始化的时候运行。...构造函数:运行时间比构造代码块时间晚,也是在对象初始化的时候运行。没有返回值,构造函数名称和类名一致。...普通函数:不能自动调用,需要对象来调用,例如a.add(); 如果只看代码运行先后顺序的话:构造代码块>构造函数>普通函数 下面给一个程序 1 public class Test1 { 2 3...} 30 } 运行结果: image.png 通过上面的程序运行结果,我们可以看出,不管构造代码块是在构造函数之后还是在构造函数之前,都是先运行构造代码块 然后在运行构造函数。...构造函数通过重载,有两种初始化方式,一种是没有参数的,一种是有参数的。 如果不调用普通函数,普通函数是不能执行的。

    1.8K20

    婴儿的出生为你解惑构造函数和构造代码块

    序言:          今天回想这几天走过的Java路程,发现漏了一个点,就是构造代码块,我绞尽脑汁,也没想起来它的作用,我骗不了我自己,就搜相关资料,重新学习,在学习的过程中发现构造代码块和构造函数有一定的联系...,为了捕捉这种联系,我总结了一个案例,这个案例能加深你对构造函数和构造代码块的理解。...,Java编译器会为该类添加一个无参的构造方法 5.如果一个类已经显示的写上一个构造方法时,Java编译器不会再为该类添加无参的构造方法 6.构造函数是可以在一个类中以函数重载的形式存在多个的 //婴儿类...通过上面的黑户和白户,我们能对构造函数有个深刻的理解,下面我再引申出构造代码块,依旧是这个例子,但是需求变了,现在的需求是婴儿一出生就必须哭,可能说到这,要是有人理解了上面的代码,肯定马上就能想到,这还不简单...,是在构造函数之前执行的,构造函数中的代码是最后执行的 4.成员变量的显式初始化与构造代码块的代码是按照当前代码的顺序执行的 //婴儿类 public class Baby { int id;/

    35620

    【C++】类和对象(中):类的默认成员函数,构造函数、析构函数、拷贝构造函数、运算符重载

    ,所以全缺省构造函数和无参构造函数不能同时存在,在之前介绍函数重载的时候就说过,不清楚的去看看【C++】C++入门知识详解(下)-CSDN博客 用全缺省构造函数是最好的,因为我们可以不传参,都传参,传一部分参...这也就是为什么我在这一小节的开头并没有自己写拷贝构造函数的代码但依然可以进行拷贝构造。...1.运算符重载其实是一个具有特殊名字的函数,它的名字由operator和后面要定义的运算符共同组成。和其他函数一样,它也具有返回类型和参数列表以及函数体。...//运算符重载函数名类似于这样 operator< operator== 2.重载运算符函数的参数个数和该运算符作用的运算对象数量一样多。...还是拿Date类举例,区分一下赋值运算符重载和拷贝构造。

    1.3K10

    【C++】C++入门—初识构造函数 , 析构函数,拷贝构造函数,赋值运算符重载

    无返回值 对象实例化时编译器自动调用对应的构造函数 构造函数可以重载(最好实现一个全缺省的构造函数) class Date { public: Date(int year = 2024, int month...解答:C++把类型分成内置类型(基本类型)和自定义类型。...无参的构造函数和全缺省的构造函数都称为默认构造函数,并且默认构造函数只能有一个。...拷贝构造函数典型调用场景: 使用已存在对象创建新对象 函数参数类型为类类型对象 函数返回值类型为类类型对象 4 赋值运算符重载 运算符重载 C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数...Date& operator++() { _day += 1; return *this; } 后置++: 前置++和后置++都是一元运算符,为了让前置++与后置++形成能正确重载 C++规定:

    34710

    工厂函数和构造函数

    ---- theme: channing-cyan 这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战 工厂函数 工厂模式是一种设计模式,说白了就是一种简单的函数,这个函数可以创建对象,为它添加属性和方法...这种设计模式是就是为了降低代码冗余。...(4) 执行构造函数内部的代码(给新对象添加属性)。 (5) 如果构造函数返回非空对象,则返回该对象;否则,返回刚创建的新对象。...构造函数虽然好用,但是也有一些问题,我们分析一下逻辑 上面的例子,person1和person2都有一个sayName()方法,但这俩个方法却不是同一个function实例,相当于这里定义的方法sayName...因为这一次 sayName 属性中包含的只是一个指向外部函数的指针,所以 person1 和 person2共享了定义在全局作用域上的 sayName()函数。

    1.1K20

    Prism代码高亮Pjax重载函数

    一个解决Pjax下代码高亮异常的方法 前言 最近给博客加入了代码高亮的功能,发现直接访问文章页面有代码高亮 但是进首页再点击文章页后,代码高亮消失,刷新才行 发现是Pjax的问题,解决后就在此做个记录并分享...---- PrismJs实现的高亮代码   主要包括自己设置的Prism高亮代码以及CodeHighlighter,不管哪个,只要是Prism,就可以通过以下内容重载。...主题设置Pjax重载 ↓这部分内容,需要你的主题后台,有设置pjax重载的选项↓ ? ↓代码如下↓ if (typeof Prism !...你可以将你的Pjax重载添加到本文中的Pjax重载函数中 ↓不懂?...请看下图以及代码举例↓ $(document).on('pjax:complete', function() { 重载一 重载二 重载三

    1.4K10

    构造代码块、构造函数、静态代码块 学习笔记

    String naem; private Date date; //构造函数 public User(){ System.out.println("构造函数....,而且优先于构造函数执行。...构造函数的作用: 给对象进行初始化,对象一建立就运行。 构造函数和构造代码块的区别: 构造代码块是给所有对象进行统一初始化;而构造函数是给对应的对象初始化。...构造代码块中定义的是不同对象共性的初始化内容。 静态代码块的作用: 随着类的加载而执行,只执行一次,并优先于主函数,用于给类进行初始化。...初始化 3、在堆内存中开辟空间,分配内存地址 4、在堆内存中建立对象的特有属性,并进行默认初始化 5、对属性进行显示初始化 6、对对象进行构造代码块初始化 7、对对象进行对应的构造函数初始化 8、将内存地址赋给栈内存中的

    99510

    js 中的构造函数,构造函数作用,构造函数和普通函数的区别

    之所以有构造函数与普通函数之分,主要从功能上进行区别的,构造函数的主要 功能为 初始化对象,特点是和new 一起使用。new就是在创建对象,从无到有,构造函数就是在为初始化的对象添加属性和方法。...以上就是构造函数的整个执行过程。 3、用new和不用new调用构造函数,有什么区别? 1、用new调用构造函数,函数内部会发生如下变化: 创建一个this变量,该变量指向一个空对象。...在使用对象字面量创建一系列同一类型的对象时,这些对象可能具有一些相似的特征(属性)和行为(方法),此时会产生很多重复的代码,而使用构造函数就可以实现代码复用。...6、 构造函数和普通函数的区别 1、构造函数也是一个普通函数,创建方式和普通函数一样,但构造函数习惯上首字母大写。 2、调用方式不一样。...逐个执行函数中的代码 D、将新建的对象作为返回值 6、构造函数的返回值默认是this 也有其他情况 。

    5.2K10

    【Kotlin】Kotlin 构造函数 ( 主构造函数 | 主构造函数声明属性 | init 初始化代码块 | 次构造函数 | 构造函数委托 | 调用构造函数创建实例对象 )

    主构造函数 II . 主构造函数声明属性 III . init 初始化代码块 IV . 主构造函数参数 和 成员变量访问方式 V . 主构造函数 可见性 设置 VI ....代码执行顺序 : init 初始化代码块 , 与类的属性定义优先级相同 , 在类对象实例初始化时 , 会按照在类中定义的顺序 , 依次执行类属性初始化和 init 初始化代码块 ; 4 ....主构造函数参数 和 成员变量访问方式 ---- 1 . 主构造函数参数访问性 : 可以在 类属性字段初始化赋值 和 init 初始化代码块中 访问主构造函数中的参数变量值 ; 2 ....构造函数参数 与 成员变量访问 示例代码及解析 : ① 构造函数参数访问 : 使用 name 和 age , 访问的是构造函数的参数 , 不能访问成员变量 ; ② 成员变量访问 : 使用 this.name...初始化代码块 : init 代码块等同于主构造函数的函数体 , 当次构造函数将操作委托给主构造函数时 , 会先执行 init 初始化代码块 , 然后再运行次构造函数体 ; IX .

    5.6K10

    构造函数和原型

    ③执行构造函数里面的代码,给这个新对象添加属性和方法。 ④返回这个新对象(所以构造函数里面不需要return ) ....静态成员和实例成员 JavaScript的构造函数中可以添加一些成员,可以在构造函数本身上添加,也可以在构造函数内部的this.上添 加。通过这两种方式添加的成员,就分别称为静态成员和实例成员。...2.2静态成员 静态成员 在构造函数本身上添加的成员 如下列代码中 sex 就是静态成员,静态成员只能通过构造函数来访问 function Star(uname, age) {     this.uname...__proto__ === Star.prototype); //true 6.constructor构造函数 对象原型( __proto__)和构造函数(prototype)原型对象里面都有一个属性...构造函数实例和原型对象三角关系 1.构造函数的prototype属性指向了构造函数原型对象 2.实例对象是由构造函数创建的,实例对象的__proto__属性指向了构造函数的原型对象 3.构造函数的原型对象的

    64950

    Java 静态代码块,构造代码块,构造函数执行顺序

    类调用时,先执行静态代码块,然后才执行主函数的,总的来说,静态代码块是和类一起的,优先级最高,类加载的同时,静态代码块同时也执行,但只执行一次,所以作用一般是用来加载一些配置代码,或者加载某些文件配置。...构造函数 构造函数的作用是用于给对象进行初始化,对象一建立,就会调用与之相应的构造函数,也就是说,不建立对象,构造函数时不会运行的。 构造代码块 构造代码块的作用同样是给对象进行初始化。...对象一建立就运行构造代码块了,而且优先于构造函数执行。这里要强调一下,有对象建立,才会运行构造代码块,类不能调用构造代码块的,而且构造代码块与构造函数的执行顺序是前者先于后者执行。...构造函数和构造代码块的区别: 构造代码块与构造函数的区别是:构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化,因为构造函数是可以多个的,运行哪个构造函数就会建立什么样的对象,但无论建立哪个对象...也就是说,构造代码块中定义的是不同对象共性的初始化内容。 运行结果: 可以看出来,静态代码块只执行一次,而每次创建对象都会调用共同的构造代码块,而构造函数也只在创建对象时执行该对象的构造函数。

    1K10

    构造函数和原型

    1.构造函数和原型 1.1对象的三种创建方式--复习 字面量方式 var obj = {}; new关键字 var obj = new Object(); 构造函数方式...1.2.1实例成员 实例成员就是构造函数内部通过this添加的成员 如下列代码中uname age sing 就是实例成员,实例成员只能通过实例化的对象来访问 function Star(uname...如下列代码中 sex 就是静态成员,静态成员只能通过构造函数来访问 function Star(uname, age) { this.uname = uname; this.age...prototype 原型对象,之所以我们对象可以使用构造函数 prototype 原型对象的属性和方法,就是因为对象有 __proto__ 原型的存在。...1.8构造函数实例和原型对象三角关系 1.构造函数的prototype属性指向了构造函数原型对象 2.实例对象是由构造函数创建的,实例对象的__proto__属性指向了构造函数的原型对象 3.构造函数的原型对象的

    49710
    领券