首页 > 编程语言 >C++构造函数的调用

C++构造函数的调用

时间:2023-04-09 19:24:57浏览次数:43  
标签:调用 C++ --- person 构造 拷贝 构造函数

对象特性
---构造函数和析构函数
构造函数
---没有回值也不写void
---函数值和类名相同
---构造函数可以有参数,因此可以发生重载
---程序在调用对象的时候自动调用构造,无须手动调用,只能调用一次
析构函数语法
---析构函数,没有返回值也不写void
---函数名和类名也相同,在名称前加上符号~
---析构函数不可以有参数,因此不可以发生重载
---程序在对象销毁前会自动调用析构,无须手动调用, 而且只能化调用一次
构造函数的分类及其调用
---按参数分为:有参构造和无参构造
---按类型分为:普通构造和拷贝构造
   class person
   {
    public:
    //拷贝构造函数
    person(const person &p)//拷贝的函数不能更改值,也就是在里面在传入一个值
   {
     m_age=p.age;
   }
     int m_age;
   };

--- 三种调用的方式

--- 括号法

- ~~~
     int main()
    {
      person p1;//默认构造函数的调用,注意不要加()因为系统会认为是声明
      person p2(10);//有参构造函数
      person p3(p2);//拷贝构造函数
     }
显示法
---person p1;
---person P2=person (10);//有参构造
---person p3=person(p2);//拷贝构造
---person(10);//这是匿名对象,特点当前执行结束后,系统会立即回收匿名对象。
---person(p3);//注意不要利用拷贝构造函数初始化匿名对象,编译器会认为 person(p3)==person p3;系统认为是声明 ~~~
隐式转换法
---person p4=10;//相当于写了person p4=person(10);也就是显示法
---person p5=p4;//拷贝构造。

---拷贝构造的调用顺序

---来初始化一个新的对象时。

--- 值传递的会复制一份内存。故在调用默认构造时也调用了拷贝构造。

--- 值传递返回局部变量时也会调用一次默认函数和拷贝构造。

构造函数的调用

--- 用户定义有参构造函数,c++不提供默认无参构造。但调用拷贝构造

--- 如果用户定义拷贝构造函数,c++不会提供其他的构造函数

--- 如果没有调用函数,系统会自动提供。例如:拷贝构造,系统会进行赋值操作。

标签:调用,C++,---,person,构造,拷贝,构造函数
From: https://www.cnblogs.com/boyboy/p/17300833.html

相关文章

  • c++Primer 14 重载运算符与类型转换
    除了重载的函数调用运算符operator()之外,其他重载运算符不能含有默认实参。      泛型算法中调用的几元谓词是看函数对象的调用运算符的参数个数。而不是构造函数的参数个数。    转换构造函数只能有一个参数,如果他有多个参数,就无法判断是将哪个参数转......
  • C++数组
    数组C++中的数组是一种特殊类型的变量,它可以存储一组具有相同数据类型的元素,这些元素在内存中是按照一定的顺序排列的。下面是C++数组的一些特点:数组的元素类型必须相同。例如,一个int类型的数组中只能存储int类型的元素。数组的大小是固定的。一旦数组被创建,它的大小就不能再......
  • 如何在Linux环境下配置C/C++环境
    root权限后,使用yum源安装yum-yinstallgccgcc-c++kernel-devel//安装gcc、c++编译器以及内核文件查看GCC版本,看是否安装成功gcc-v出现这个就是安装成功了编译&运行C文件为:gcc-o文件名(无后缀)文件名(有后缀)并回车gcc-otesttest.cC++文件为:g++-o文......
  • (5)使用函数验证哥德巴赫猜想:任何一个不小于6的偶数均可表示为两个奇和。输入两个正整数
    #include<stdio.h>#include<math.h>intprime(intm){  inti;  if(m<2)    return0;  for(i=2;i<=sqrt(m);i++){    if(!(m%i))      return0;  }  return1;}intmain(){  intm,n,flag;  printf("Enterm,......
  • C++,OpenCV图形绘制与文字输出(7)
    绘线voidline(InputOutputArrayimg,Pointpt1,Pointpt2,constScalar&color,intthickness=1,intlineType=LINE_8,intshift=0);//线的样式enumLineTypes{FILLED=-1,LINE_4=4,//!<4-connectedlineLINE_8=8,//!<8-connec......
  • 对象 (构造函数)
    创建对象三种方法字面量创建创建对象newObjectnotice构造函数创建对象?构造函数其实就是创建一个函数的母亲,用new母亲()可以创建很多儿子构造函数必须以大写字母开头构造函数的函数体不需要写return只能用new来创建新儿子函数js中几乎所有的数据都可基于构造函......
  • MordernC++之左值(引用)与右值(引用)
    左值与右值C++中左值与右值的概念是从C中继承而来,一种简单的定义是左值能够出现再表达式的左边或者右边,而右值只能出现在表达式的右边。inta=5; //a是左值,5是右值intb=a; //b是左值,a也是左值intc=a+b; //c是左值,a+b是右值另一种区分左值和右值的方法是:有......
  • C++函数高级
    目录一.函数的默认参数1.默认参数的性质 2.函数默认参数的注意事项二.函数的占位参数三.函数的重载  1.重载的性质和条件(1)修改参数的个数(2)修改参数的类型(3)修改参数的顺序2.函数重载的注意事项 (1)当引用&作为函数参数(2)不可以用函数的默认参数作为重载条件 一.函数的默认参数1.......
  • C++内存对齐
    0x1什么是内存对齐,为什么需要它?尽管内存是以字节为单位,但是大部分处理器并不是按字节块来存取内存的.它一般会以双字节,4字节,8字节,16字节甚至32字节为单位来存取内存,这些存取单位称为内存存取粒度。现在考虑4字节存取粒度的处理器取int类型变量(32位系统),该处理器只能从地址为4......
  • house_of_snake:一条高版本Glibc IO调用链
    house_of_snake:一条高版本GlibcIO调用链本文首发于[看雪论坛],仅在个人博客记录前言之前听说glibc2.37删除了_IO_obstack_jumps这个vtable。但是在源码里还看到obstack结构体存在,那么glibc2.37真的不能再调用_IO_obstack_jumps的那条链吗?看完本文就知道还可以调用_IO_obstack......