首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++ 构造函数&解析函数

2.1 1,析构函数特点 3 参考资料 一,构造函数 构造函数的一种特殊的成员函数,它会在每次创建的新对象时执行。...1,构造函数作用 构造函数主要用来创建对象时完成对对象属性的一些初始化等操作, 当创建对象时, 对象会自动调用它的构造函数。...一般来说, 构造函数有以下三个方面的作用: 给创建的对象建立一个标识符; 对象数据成员开辟内存空间; 完成对象数据成员的初始化。...构造函数的名称与的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于某些成员变量设置初始值。...() << endl; return 0; } 程序编译运行之后,输出结果如下图所示: 4,带参数的构造函数 默认的构造函数没有任何参数,但是实际中,我们常常创建带有参数的构造函数,其创建对象时就会给对象赋初始值

1.1K20

C++函数指针指针函数、返回值函数指针函数浅谈

C++函数指针指针函数、返回值函数指针函数浅谈 引言 函数指针指针函数是C中重要而容易混淆的概念,博主将通过两个实例来说明这两个截然不同的概念。...而返回值函数指针指针函数就更难理解了,放在文章的最后来介绍。 函数指针 函数指针是一种特殊的 指针,它指向函数的入口。...类型的对象 A* b = createA(); //通过指针调用的方法 cout a = " getA() << endl;...return 0; } 返回值函数指针函数 其实在搞懂了函数指针指针函数后,这个概念并不难懂,其实这就是一个复杂一点的指针函数,因为他的返回值函数指针。...这是一个指针函数,返回值函数指针(返回值void,无参数列表的一个函数),它有一个参数,参数一个函数指针 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/152178

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

C++】This指针和复制构造函数

声明一个的时候,是没有分配存储空间的,只有真正定义一个对象的时候,程序才会为这个对象分配相应的存储空间。...this指针 每个成员函数中,都包含一个特殊的指针。 这个指针的名字是固定的,就是this指针。 this指针是指向对象的指针,它的值是当前被调用的所在对象的地址!...this指针是指向本类对象的指针,它作为参数传递给成员函数 this指针是隐式使用的。由编译器自动实现,我们不必人为的形参中添加this指针。...CTime(CTime& time);//使用名对象作为参数,传引用 调用复制构造函数的时机: 什么情况下使用复制构造函数 1.以其他对象作为参数创建新对象时。...,以对象(传值)作为函数参数时, 这样使用的时候,就会造成死循环!

80720

C++函数重载 ③ ( 函数指针赋值重载函数 )

函数指针 章节中 , 详细介绍了 函数指针 , 以及 函数指针 与 数组 , 其它指针 结合的 复杂指针如何进行解读 ; " 函数指针 " 是一种 指向函数指针 , 表示的是 函数地址 , 其指向 函数...func_ptr(1, 2) 和 func_ptr2(1, 2) 代码 , 都可以调用到函数 ; 函数指针完整代码示例 : // 包含 C++ 头文件 #include "iostream" //...二、函数指针赋值重载函数 ---- 1、函数指针赋值重载函数函数指针 进行赋值时 , 直接将 函数名 赋值给了 函数指针 ; 如 下面的代码中 , 直接将 add 函数赋值给了 函数指针 func_ptr...int (*func_ptr)(int, int) 代码 , 定义的 函数指针 有 2 个 int 类型的参数 , 有 1 个 int 类型的返回值 ; 函数指针 赋值 add 函数 时 , 就会自动...查找 参数列表是 2 个 int 类型的函数 , 如果没有找到 , 就会编译失败 , 如果找到了 , 函数指针赋值成功 ; 2、代码示例 - 函数指针赋值重载函数 完整代码示例 : // 包含 C

22910

C++与对象(构造函数、析构函数、拷贝构造函数、常引用)

其实,任何什么都不写时,编译器会自动生成6个默认成员函数。 默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。...特性 析构函数名是名前加上字符 ~。 无参数无返回值类型 一个只能有一个析构函数。若未显式定义,系统会自动生成默认的析构函数。...拷贝构造函数 拷贝构造函数:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存 类型对象创建新对象时由编译器自动调用。 特性 拷贝构造函数构造函数的一个重载形式。...中如果没有涉及资源申请时,拷贝构造函数是否写都可以;一旦涉及到资源申请 时,则拷贝构造函数是一定要写的,否则就是浅拷贝。 C++规定自定义的类型都会调用拷贝构造。...注意:拷贝构造时要传引用,不能传值。如果传值,根据C++规定,会调用拷贝构造,这样就会无穷递归下去,发生错误。

13610

C++构造函数与析构函数

C++中每个都有其构造与析构函数,它们负责对象的创建和对象的清理和回收,即使我们不写这两个,编译器也会默认为我们提供这些构造函数。...编译器是否真的会默认提供构造与析构函数 一般讲解C++的书籍中都会提及到当我们不为提供任何构造与析构函数时编译器会默认提供这样六种成员函数:不带参构造,拷贝构造,“=”的重载函数,析构函数,以及带const...+代码与之前的仅仅是多了一个虚函数,这个时候编译器这个定义了一个默认的构造函数,从汇编代码中可以看到,这个构造函数主要初始化了对象的头4个字节,将虚函数表的地址放入到这个4个字节中,因此我们得出结论...0040140E mov eax,dword ptr [ebp-4] 从上面的代码中可以看到,当父有虚函数时,编译器也会提供构造函数,主要用于初始化头四个字节的虚函数表的指针。...由于默认的拷贝构造是进行简单的内存拷贝,所以当中的成员中有指针变量时尽量自己定义拷贝构造,进行深拷贝,否则在以后进行析构时会崩溃。

1.6K10

C++和对象】构造函数与析构函数

C++的默认成员函数包括: 默认构造函数(Default Constructor):当对象被创建时,如果没有显式地定义构造函数,则会调用默认构造函数来初始化对象。...C++的6个默认成员函数根据它们各自的作用和特性可以被分为以下三: 2.构造函数 2.1概念 C++构造函数是用于初始化对象的特殊成员函数。它的名称与名相同,并且没有返回类型。...可以通过 Init 公有方法给对象设置日期,但如果每次创建对象时都调用该方法设置信息,未免有点麻烦,所以C++提出了构造函数构造函数是一个特殊的成员函数,名字与名相同,创建类型对象时由编译器自动调用...Time的默认构造函数 注意:C++11 中针对内置类型成员不初始化的缺陷,又打了补丁,即:内置类型成员变量中声明时可以给默认值。...,所以d销毁时,要将其内部包含的Time的_t对象销毁,所以要调用Time的析构函数

12010

C++|内存管理|智能指针别名构造函数

本文参考ISO文档 C++编程实践中, 几乎所有人都或多或少地使用过智能指针.但是智能指针的一个小角落, Alias Constructor大概不为多少人所知. ---- 根据stackoverflow...事实上, shared_ptr中存储的控制块指针仅仅只是一个非模板基, 而存储指针/删除器/分配器等特征都通过指向派生出的模板子类(多态)而体现....内部控制块的模板参数和外部智能指针的模板参数毫无干系, 因此控制块指针和存储指针本质上是完全独立的. ---- 那么,为什么C++需要用如此复杂的方式去实现呢?...其语法shared_ptr ptr(Tptr, element*) 在这里尽管Tptr具有模板参数T, 但是ptr(模板参数element)仍旧可以共享其控制块....reset(); cout base2; cout << "end"; return 0; } C

51620

C++:堆与拷贝构造函数及补充this指针

new 和 delete C++ 是面向对象编程语言,和对象变得尤为重要,也是 C++ 与 C 语言的主要区分标志, C++ 中我们不能再依赖 C 语言中的 malloc ()等函数申请内存,其中一个原因是...,它不能在分配空间时调用中的构造函数,然而对象的建立正是由构造函数来完成的。...而 free()函数也不会调用中的析构函数,关于构造函数及析构函数详见文章。...与构造函数类似,当开发者没有定义自己的拷贝构造函数时,C++ 将提供一个默认拷贝构造函数。...的确如此,一个中所有对象调用的成员函数都处于同一个代码段,成员函数为了区分数据成员属于哪一个对象,故出现了 this 指针

77020

c++和对象(三)构造函数和析构函数

构造函数是一种特殊的成员函数,它在创建对象时自动调用,其主要目的是初始化对象。C++中,构造函数具有与其所属相同的名称,并且没有返回类型。...如果一个定义中没有显式地包含任何构造函数,编译器会自动生成一个默认构造函数(只没有其他任何构造函数时) 特性: 函数名与名相同 无返回值 对象实例化时编译器自动调用对应的构造函数 构造函数可以重载...然而,这里的设计存在冲突,因为两个构造函数都可以作为默认构造函数,这导致了一个重定义的问题 C++中,如果构造函数的所有参数都有默认值,它就可以被视为无参数调用时的候选构造函数,也就是说,它可以被当作默认构造函数...因此,这个设计逻辑上等同于提供了两个默认构造函数,这在C++中是不允许的,会导致编译错误 问题在于,当尝试创建一个不传递任何参数的Date对象(如Dated1;),编译器将无法确定应该调用哪个构造函数...Time析构函数,而是显式调用编译器Date生成的默认析构函数注意:创建哪个的对象则调用该类的析构函数,销毁那个的对象则调用该类的析构函数 如果类中没有申请资源时,析构函数可以不写,直接使用编译器生成的默认析构函数

13210

C++构造函数初始化列表 ② ( 构造函数 初始化列表 传递参数 | 嵌套情况下 的 构造函数 析构函数 执行顺序 )

一、构造函数 初始化列表 传递参数 1、构造函数参数传递 构造函数 初始化列表 还可以使用 构造函数 中的参数 ; 借助 构造函数 中的参数列表 , 可以为 初始化列表 传递参数 ; 在下面的代码中..., B 的 有参构造函数 , 传入了 3 个参数 , 这三个参数都不在函数体中使用 , 而是 参数列表中使用 , // 构造函数中的参数可以作为 B(int age, int ageOfA,..., A 定义了 2 个参数的 有参构造函数 ; B 定义了 无参构造函数 , 但是该 无参构造函数 中 , 定义了函数列表 B() : m_age(10), m_a(10, 150) , 函数列表中...0; } 执行结果 : 二、嵌套情况下 的 构造函数 / 析构函数 执行顺序 ---- 1、构造函数 / 析构函数 执行顺序 B 中 定义了 A 类型 的 成员变量 ; A 类型对象 是 被组合对象...初始化列表 的顺序 进行初始化 ; 析构函数执行顺序 : 析构函数构造函数 的执行顺序 相反 ; 2、代码示例 - 构造函数执行顺序 下面的代码中 , B 中定义 A 类型 成员变量 ;

20130

C++C++ 中的 this 指针用法 ③ ( 全局函数 与 成员函数 相互转化 | 有参构造函数设置默认参数值 | 返回匿名对象与返回引用 )

一、全局函数 与 成员函数 相互转化 1、成员函数转为全局函数 - 多了一个参数 C++ 编译器 , 在编译阶段会将 C++ 的 成员函数 转为 全局函数 , 转换时 , 会 增加一个参数到参数列表开始为止..., 这个增加的参数是 对象本身的指针 ; Student 中 , 定义了如下函数 : // 成员函数 转为 全局函数 , 多了一个参数 Student* pThis 作为第一个参数 void..., 对象本身 就是 左操作数 , 成员函数中 , 通过 this 指针访问对象本身的成员 ; 全局函数中 , 实现两个 Student 相加 , 接收两个 Student 引用类型的参数 , 引用相当于一级指针...---- Student 定义了有参构造函数 , 则其默认的无参构造函数 , 就不会生成 ; // 带参构造函数 Student(int age, int height) { this..., 只能调用上述 有参构造函数 , 如果使用 Student s2 的方式调用 默认构造函数 创建 Student 对象 , 就会报错 ; 如下带参数的构造函数 , 并且为其 有参构造函数 的参数 设置一个默认值

17920

C++ 构造函数初始化列表

上面的构造函数(使用初始化列表的构造函数)显式的初始化的成员;而没使用初始化列表的构造函数是对的成员赋值,并没有进行显式的初始化。...1.成员类型是没有默认构造函数。若没有提供显示初始化式,则编译器隐式使用成员类型的默认构造函数,若没有默认构造函数,则编译器尝试使用默认构造函数将会失败。 2.const 成员或引用类型的成员。...1.内置数据类型,复合类型(指针,引用)- 成员初始化列表和构造函数体内进行,性能和结果上都是一样的 2.用户定义类型(类型)- 结果上相同,但是性能上存在很大的差别。...因为类型的数据成员对象进入函数体前已经构造完成,也就是说成员初始化列表处进行构造对象的工作,调用构造函数进入函数体之后,进行的是对已经构造好的对象的赋值,又调用个拷贝赋值操作符才能完成(如果并未提供...初始化列表的成员初始化顺序: C++ 初始化成员时,是按照声明的顺序初始化的,而不是按照出现在初始化列表中的顺序。 ?

1.9K20

C++干货基地】六大默认成员函数: This指针 | 构造函数 | 析构函数

C++中通过引入this指针解决该问题,即:C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),函数体中所有“成员变量”的操作,都是通过该指针去访问...1.2 this 指针的特性 this指针的类型:类型 const,即成员函数中,不能给this指针赋值。...空中真的什么都没有吗?并不是,任何什么都不写时,编译器会自动生成以下6个默认成员 函数。 默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。...无参构造函数 有些场景下我们肯需要无参构造函数,但是很多新手调用的时候总会出现调用错误: 无参构造函数调用的时候,是不需要写括号的 对象后面不用跟括号,否则就成了函数声明 class Date...4.2 析构函数的特性 析构函数是特殊的成员函数,其特征如下: 析构函数名是名前加上字符 ~。 无参数无返回值类型。 一个只能有一个析构函数。若未显式定义,系统会自动生成默认的析构函数

5300

C++和对象之拷贝构造函数

前言 在前面学习了6个默认成员函数中的构造函数和析构函数C++构造函数和析构函数详解,接下来继续往后看拷贝构造函数。 拷贝构造函数就是用一个同类型的其他对象来构造。...拷贝构造函数:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类型对象创建新对象时由编译器自动调用。 4....特征 拷贝构造函数也是特殊的成员函数,其特征如下: 拷贝构造函数构造函数的一个重载形式。 拷贝构造函数的参数只有一个且必须是类型对象的引用,使用传值方式编译器直接报错,因为会引发无穷递归调用。...会导致野指针。 注意:中如果没有涉及资源申请时,拷贝构造函数是否写都可以;一旦涉及到资源申请时,则拷贝构造函数是一定要写的,否则就是浅拷贝。...拷贝构造函数典型调用场景: 使用已存在对象创建新对象 函数参数类型类型对象 函数返回值类型类型对象 class Date { public: Date(int year, int minute

11510

C++基础——C++面向对象之类、对象与继承基础总结(和对象概念、构造函数与析构函数、this指针、继承)

1.1 和对象基本概念  1.2 构造函数和析构函数 1.3 this指针 2 继承 3 总结 ---- 0 引言         C++面向对象有三大特征,分别是继承、多态和封装,接下来的三篇博文将会对这三大特性分别进行总结...People,然后自己写一个构造函数和析构函数函数中及main函数中打印信息。...1.3 this指针         每个对象都拥有一个 this 指针, this 指针记录对象的内存地址, C++中, this 指针是指向自身数据的指针, 简单的来说就是指向当前的当前实例对象...的 this 指针有以下特点: 1)this 只能在成员函数中使用, 全局函数、静态函数都不能使用 this。 实际上,成员函数默认第一个参数 T * const this。...+中和对象的基本概念,给出了构造函数和析构函数的区别,并总结了this指针的使用方法,有了以上基础后,进一步总结了C++语言的三大特征之一继承的基本概念,并结合实例演示了继承的使用方法。

76250

C++修行之道】和对象(三)拷贝构造函数

拷贝构造函数典型调用场景: 使用已存在对象创建新对象 函数参数类型类型对象 函数返回值类型类型对象 class Date { public: Date(int year = 1900, int...不能接收临时对象:C++中,临时对象(也称为右值)经常出现在表达式中,例如函数返回值或者类型转换的结果。由于这个拷贝构造函数不接受右值引用或常量引用,因此它不能用于拷贝这些临时对象。... Date 中,_t 是 Time 类型的成员变量。当默认拷贝构造函数被调用时,它会进一步调用 Time 的拷贝构造函数来初始化新对象 d2 中的 _t 成员。...使用memcpy函数将原始对象栈中的元素复制到新分配的内存中。将新对象的_size和_capacity设置与原始对象相同的值。...五、拷贝构造函数典型调用场景: 使用已存在对象创建新对象 函数参数类型类型对象 函数返回值类型类型对象 class Date { public: Date(int year, int month

6210
领券