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

C++ this指针:用于成员函数中指向调用函数对象

C++中this指针是一个指向当前对象的指针。成员函数中,可以使用this指针来访问调用函数对象成员变量和成员函数。...一、定义和使用this指针 this指针是成员函数内部定义的一个常量指针。它存储了当前对象的地址,可以通过它访问当前对象成员变量和成员函数。...这里this->name等价于成员变量name。getName函数内部,this指针被用来访问成员函数getName()。这里this->getName()等价于调用成员函数getName()。...这里使用了*this来访问调用函数对象。 三、作为函数参数的this指针 this指针也可以作为函数参数传递。这种情况下,可以函数内部访问其他对象成员变量和成员函数。...getName函数内部,使用了this指针访问调用函数对象成员变量name。

19640

C++打怪升级(六)- 类和对象入门3

前文我们并没有对构造函数进行进一步的探讨,即类对象创建成员变量具体是构造函数哪里初始化的?...,如果一个成员变量被我们显式的初始化列表中写了,那么编译器就不在初始化列表中生成成员变量的默认初始化了; 每一个类对象成员变量的定义都发生在构造函数的初始化列表中; 调用构造函数,先进行初始化列表中的操作...,且该类没有默认构造函数 因为创建类对象调用构造函数构造函数的初始化列表会自动调用自定义类行变量的默认构造函数,如果该自定义类型没有默认构造函数程序就会报错; class A { public...类对象创建都要调用构造函数; class A { public: A(int a) :_a(a) { } private: int _a; }; 类对象可以创建在栈:A a1(10);...,然后再写一个类对象创建的函数,并返回这个类对象的拷贝即可注意拷贝构造函数并不是私有的,即拷贝构造在类外可以调用,用于类对象返回临时对象进行拷贝构造; 如果拷贝构造也设置成私有的,那么类外无法调用拷贝构造

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

C++之类和对象

而面向对象的语言遇到问题则不再将重点放在过程,而是将重点转移到解决这个问题需要的对象。...指向其他对象) 3.this 指针本质是“成员函数”的一个形参,当对象调用成员函数,将对象地址作为实参传递给 this 形参,所以对象中不存储this 指针; 4.this 指针是“成员函数”...构造函数 基础知识 构造函数是一个特殊的成员函数,名字与类名相同并且不需要写返回类型。构造函数并不需要用户自己调用,而是创建类类型对象后由编译器自动调用,并且在对象生命周期内只能调用一次。...当变量的生命周期结束变量就被销毁,所以位于函数中的局部对象函数调用完成销毁,位于全局的对象main函数调用完成销毁;另外,后定义的对象会被先销毁。...析构函数不能重载) 4.对象生命周期结束,C++编译系统系统自动调用析构函数; 5.析构函数对内置类型不处理,对自定义类型调用它自身的析构函数 可以看到,虽然我没有调用析构函数,但是编译器

1.1K00

学习总结——关于C#中的序列化

1、什么是序列化 (来自百度百科) 序列化(Serialization)是将对象的状态信息转化为可以存储或传输的形式的过程。序列化期间,对象将其当前状态写入到临时或持久存储区。...这一功能在反序列化后成员变量的值失效尤其有用,但是需要为变量提供值以重建对象的完整状态。...要实现 ISerializable,需要实现 GetObjectData 方法以及一个特殊的构造函数反序列化对象要用到此构造函数。...但是,由于无法强制实现构造函数,所以,缺少构造函数不会发出警告。如果在没有构造函数的情况下尝试反序列化某个类,将会出现异常。...,否则,将永远不会调用基类的构造函数,并且反序列化后也无法构建完整的对象

84431

【C++ 初阶路】--- 类和对象(下)

若未显式定义,系统会自动生成默认的析构函数。注意:析构函数不能重载; 对象生命周期结束,C++编译系统系统自动调用析构函数。...,所以d销毁,要将其内部包含的Time类的_t对象销毁,所以要调用Time类的析构函数。...Time类的析构函数*,即当Date对象销毁,要保证其内部每个自定义对象都可以正确销毁 main函数中并没有直接调用Time类析构函数,而是显式调用编译器为Date类生成的默认析构函数 注意:创建哪个类的对象调用该类的构造函数完成初始化...析构函数调用顺序:局部对象(后定义先析构)=> 局部的静态对象 => 全局对象(后定义先析构)。 二、拷贝构造函数 2.1 概念 创建对象,可否创建一个与已存在对象一某一样的新对象呢?...事实这儿都不会进入函数的内部,每当传值传参就会形成一个新的拷贝构造。 若未显式定义,编译器会生成默认的拷贝构造函数

6810

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

其实,任何类什么都不写,编译器会自动生成6个默认成员函数。 默认成员函数:用户没有显式实现,编译器会生成成员函数称为默认成员函数。...构造函数 构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象由编译器自动调用,在对象整个生命周期内只调用一次。...注意:析构 函数不能重载 对象生命周期结束,C++编译系统系统自动调用析构函数 编译器生成的默认析构函数,对自定类型成员调用它的析构函数,对内置类型不做处理。...拷贝构造函数 拷贝构造函数:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存 的类类型对象创建新对象由编译器自动调用。 特性 拷贝构造函数是构造函数的一个重载形式。...分析:调用func1要传值传参,就会先调用拷贝构造,然后才能调用func1。 运行时发生错误,显示没有默认构造函数可用。

13710

从零开始学C++之构造函数与析构函数(二):初始化列表(const和引用成员)、拷贝构造函数

从输出可以看出几点,一是构造对象之前,必须先构造对象成员;二是对象成员构造的顺序与定义的顺序有关,跟初始化列表顺序无关;三是构造的顺序和析构的顺序相反;四是如果对象成员对应的类没有默认构造函数,那对象成员也只能在初始化列表进行初始化...当函数的返回值是类对象函数执行完成返回调用使用。也是要建立一个临时对象,再返回调用者。为什么不直接用要返回的局部对象呢?...因为局部对象离开建立它的函数就消亡了,不可能在返回调用函数后继续生存,所以处理这种情况,编译系统会在调用函数的表达式中创建一个无名临时对象,该临时对象的生存周期只函数调用处的表达式中。...所谓return 对象,实际调用拷贝构造函数把该对象的值拷入临时对象。如果返回的是变量,处理过程类似,只是不调用构造函数。...即在传参的时候调用了拷贝构造函数函数返回TestFun 的形参t 1生存期到了,分割线输出之前销毁t1,最后destroy 的是 t。

1.3K00

类和对象(下)

,默认构造函数对内置类型不处理,对自定义类型调用它的默认构造函数,const int为内置类型,不会处理 正常来说,date类实例化生成对象d,是对象整体的定义,即对每个成员变量定义 但是像const...所以就有了初始化列表 那个对象调用构造函数,初始化列表是它所有成员变量定义的位置 不管是否显示初始化列表写,编译器每个变量都会在初始化列表定义初始化 成员变量出现随机值 #include<iostream..._a=5 date d; return 0; } 因为构造函数对于内置类型不处理,对于自定义类型调用它的默认构造函数, 所以定义必须初始化的包含自定义类型(不带默认构造函数) 3.成员变量类中的声明次序就是初始化列表中的初始化顺序...,调用函数,A a 构造一次,return a,拷贝构造生成一个临时变量,再用临时变量拷贝构造b,由于 两次拷贝构造是连续步骤,所以优化成一次拷贝构造 即 构造+拷贝构造 而横线下面先是函数中 A...b构造一次 ,调用func4函数, A a构造一次 ,return a拷贝构造生成一个临时变量,由于此时的b已经被定义雇过了,所以此时 属于将临时变量赋值给 b ,进行运算符重载 所以 无优化 即 构造

45120

【C++11】移动赋值 | 新的类功能 | 可变参数模板

,其函数返回值为右值,所以会先发生移动构造 临时对象 本身就是看不见 摸不到的,所以取不到地址,它也是右值 所以又会发生 移动赋值 ---- 移动赋值,实际也是进行资源的转移 ---- 如:将临时对象所指向的数据...转移到s1 中,同时可将废弃数据放入临时对象(将亡值)中 2....移动构造 都是完成浅拷贝 ---- 对于自定义类型成员 _name,因为yzq命名空间的string类中存在 移动构造,所以调用 其移动构造 ---- 刚调试执行到s1,s3实际上空间为空 当调试执行到...C++11中,不期望被拷贝,(拷贝会涉及缓冲区等问题) ---- 默认成员函数,如果不写会默认生成,加入delete后可禁止生成 3.可变参数模板 可变参数模板 :可以接受可变参数的函数模板和类模板...函数调用无参的test函数,进行换行 ---- 当有两个参数a和b,将a传给test作为第一个参数val,将b传给test作为第二个参数 参数包 当test函数内部再次调用 test,由于 参数包中的参数不为

15850

C++拷贝构造函数

对象按值传递 下面介绍拷贝构造函数的另一种调用:当对象直接作为参数传给函数函数将建立对象临时拷贝,这个拷贝过程也将调用拷贝构造函数。...BOOL testfunc(CExample obj) { //针对obj的操作实际是针对复制后的临时拷贝进行的 } 还有一种情况,也是与临时对象有关:当函数中的局部对象作为返回值被返回给函数调者,...,而在建立该临时拷贝就会调用类的拷贝构造函数。...;   //传入对象  g_Fun(test);   return 0;   }   调用g_Fun(),会产生以下几个重要步骤: (1).test对象传入形参,会先会产生一个临时变量,...此外,销毁对象,由于会调用销毁两个对象,类的析构函数调用两次,此时的计数器将变为负数。 说白了,就是拷贝构造函数没有处理静态数据成员

1.9K80

【C++进阶】C++11的认识与学习

C++98中,new 出来的一个int指针可以直接初始化,但是当有多个对象,就只能用循环初始化,C++11的列表初始化就解决了这个问题,可以用{},给多个对象初始化。...我们知道,当函数是传值返回,会先创建一个临时对象临时对象具有常属性),将数据拷贝一份给临时对象,然后临时对象返回,原来的那个对象销毁,这样要连续拷贝,如果是一个大的对象,那么将极大地影响效率,所以...,但它们底层仍然不同,不属于同一个类型 七.新的类功能 C++11之前,类有6个默认成员函数: 构造函数 拷贝构造 赋值重载 析构函数 取地址重载 const 取地址重载 C++11后又新增加了两个默认成员函数...八.delete 的新作用  C++11中,delete除了用来释放掉动态申请的资源外,还可以使编译器不自动生成默认的成员函数。...调用对象(callable object),生成一个新的可调用对象来“适应”原对象的参数列表。

13610

听GPT 讲Rust源代码--srctools(27)

多次相同的变量使用to_owned方法进行类型转换。这样的操作可能会多次创建新的拥有所有权对象,而没有必要。函数会建议相同的变量只使用一次to_owned方法,并尽可能复用该对象。...如果发现某个表达式使用了unwrap()方法,并且可以替换为更安全的方法,则会生成一个Lint对象,并将其添加到结果集中。该Lint对象包含了警告的级别、位置、警告信息等详细信息。...一旦发现违反规则的情况,函数生成相应的Lint警告。 最后,option_map_or_none规则会给出修复建议,即将通过map方法的调用链改为使用and_then方法。...然后,结构体的实现中,定义了检测制表符的相关方法,包括检查函数生成警告函数。 具体而言,检查函数会遍历源代码的每一行,检查是否有///开头的文档注释。...如果找到了注释,该函数将进一步检查注释中的每个字符,如果发现制表符,将调用生成警告函数,并将警告的位置、信息等相关信息添加到警告列表中。

14310

C++类和对象(下)

赋值,会先生成同类型临时变量,即调用一次构造函数调用拷贝构造函数,将临时变量的值拷贝给 aa1 我们可以看看打印结果是否真的如我们想的一样 结果:只调用了一次构造函数 难道编译器偷懒了...静态成员函数 静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态区 静态成员变量必须在类外定义,定义不添加static关键字,类中只是声明 类静态成员可用 类名::静态成员 或者 对象.静态成员...2 调用打印函数 //注意:两个匿名对象相互独立,创建 匿名对象2 , 匿名对象1 已被销毁 ️使用场景 匿名对象适合用于某些一次性场景,也适合用于优化性能 Date(2023, 2, 10).Print...--- 友元 新增关键字 friend ,译为朋友,常用于外部函数类中的友好声明 类中的成员变量为私有,类外函数无法随意访问,但可以类中将类外函数声明为友元函数,此时函数可以正常访问类中私有成员 友元函数会破坏类域的完整性...: 构造(匿名对象的创建) -> 构造(临时变量) -> 拷贝构造(将匿名对象拷贝给临时变量) -> 拷贝构造(将临时变量拷贝给 a) 编译器会出手优化 实际只发生了这些事情: 构造(直接把函数匿名对象值看作目标值

14120

SWIG 官方文档第四部分 - 机翻中文人肉修正

不用说,没有明显的方法可以让 C 编译器为涉及未知数量的未知类型参数的函数调用生成代码。 从理论讲,它可以是编写一个包装,做正确的事。...另外,请注意,如果成员函数是虚方法,则调用成员函数会更加复杂。...C++ SWIG_fail 此宏 SWIG 包装函数的上下文中调用时,将跳转到错误处理程序代码。这将调用任何清理代码(释放任何临时变量),然后触发 lua_error。...'p:Print()' ,__index 在对象元表查找 'Print' 属性,然后查找 'Print' 函数。...当它找到函数,它返回函数,然后解释器可以调用'Point_Print(p)' 理论,您可以使用此用户表并添加新功能,但请记住,它是一个类的所有实例之间的共享表,您很容易破坏所有实例中的功能。

5.2K40

成员函数&&构造函数&&析构函数

实际并非如此,编译器会自动生成6个默认成员函数。 默认成员函数: 用户没有显示实现,编译器自动生成的额成员函数。...构造函数 概述 在下面代码中,创建了一个Date类,每次创建对象后都要专门去调用类里面的成员函数,这样很麻烦。...定义 构造函数是一个特殊的成员函数, 名字与类名相同, 创建类类型对象由编译器自动调用,以保证每个数据成员都有 一个合适的初始值,并且在对象整个生命周期内只调用一次。...警告 C4930 “Date d3(void)”: 未调用原型函数(是否是有意用变量定义的 如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦用户显式定义编译器将不再生成...**析构函数:**与构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由编译器完成的。而对象销毁时会自动调用析构函数,完成对象中资源的清理工作。

7610

C++ 类的不同构造与三种引用

,这样就会调用拷贝构造函数去复制 const左值引用就是通过const限定,允许左值引用引用右值,当是引用右值,其会调用构造函数生成一个临时变量存储右值,再去引用这个临时变量,这是为了避免直接使用普通变量存储...还有就是,C++的类没有访问权限修饰符,把对父类的访问权限放到了子类的继承方式。同时,其成员按照权限写到对应权限的标签后,而不是一个个控制权限。...} 类运算符重载 cpp比较强大的是可以重载类与别的对象进行运算,运算符的解释,将其解释为方法调用。...// false } 实际取地址运算后,显示两个对象不是同个地址,这是因为cpp里与java不一样,默认的 == 比较对象,不是比较引用地址,而是调用类重载的==运算符方法,如果没有提供,自动转化为可以转化的类型进行...,被转为 Yyt(a) 拷贝构造函数默认浅拷贝了一个对象cpyY 拷贝构造函数的定义如下,类似构造函数,而形参是一个同类对象的const左值引用,没有重写,默认会有一个自动生成的拷贝构造函数,对所有对象成员进行浅拷贝

2.2K10

【C++修行之道】类和对象(四)运算符重载

语法,&类名::成员函数名是用来获取成员函数地址的标准方式 如果不使用&运算符,编译器可能会将OB::func解析为对成员函数调用 运算符在这里的作用是明确告诉编译器:“我要的是这个成员函数的地址...这样,编译器就能正确地生成获取成员函数地址的代码,而不是尝试调用函数。 (temp.*fp)(); // 调用成员函数 ....*:这是一个特殊的成员访问运算符,用于通过对象实例和成员函数指针来调用成员函数。当你有一个指向成员函数的指针,并且想要在某个特定的对象调用这个函数,就需要使用这个运算符。...temp对象,通过成员函数指针fp来调用它所指向的成员函数 三、运算符重载的正常使用 class Date { public: Date(int year = 1900, int month =...由于func返回的是一个临时对象,这个对象表达式结束后就会被销毁。但是,由于ref是对这个临时对象的引用,所以这个临时对象的生命周期会被延长,直到ref的生命周期结束。

8510

Effective C++: 改善程序与设计的55个具体做法

条款06:若不想使用编译器自动生成函数,就该明确拒绝 请记住 ■ 为驳回编译器自动(暗自)提供的机能,可将相应的成员函数声明为private并且不予实现。...条款11:operator=中处理“自我赋值” 请记住 ■ 确保当对象自我赋值operator=有良好行为。...条款12:复制对象勿忘其每一个成分 请记住 ■ Copying函数应该确保复制“对象内的所有成员变量”及“所有base class成分”。...条款45:运用成员函数模板接受所有兼容类型 请记住 ■ 请使用member function templates(成员函数模板)生成“可接受所有兼容类型”的函数。...一旦移植到另一个编译器,你原本倚赖的警告信息有可能消失。 条款54:让自己熟悉包括TR1在内的标准程序库 请记住 ■ C++标准程序库的主要机能由STL、iostreams、locales组成。

66220

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

深拷贝的写法: 五、拷贝构造函数典型调用场景: 六、总结: 一、 概念 现实生活中,可能存在一个与你一样的自己,我们称其为双胞胎。 那创建对象,可否创建一个与已存在对象一某一样的新对象呢?...拷贝构造函数:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型对象创建新对象由编译器自动调用。...不能接收临时对象C++中,临时对象(也称为右值)经常出现在表达式中,例如函数返回值或者类型转换的结果。由于这个拷贝构造函数不接受右值引用或常量引用,因此它不能用于拷贝这些临时对象。... Date 类中,_year、_month 和 _day 这三个整型成员变量会直接被赋值,即新对象 d2 的这些成员会获得与 d1 相同的值。 对于自定义类型成员调用该类型的拷贝构造函数。... Date 类中,_t 是 Time 类型的成员变量。当默认拷贝构造函数调用时,它会进一步调用 Time 类的拷贝构造函数来初始化新对象 d2 中的 _t 成员

6310

【笔记】《C++Primer》—— 第13章:拷贝控制

13.1 拷贝,赋值与销毁 我们通过五种特殊的成员函数来控制类的拷贝移动赋值和销毁的行为:拷贝构造函数,拷贝赋值运算符,移动构造函数,移动赋值运算符,析构函数 当没有主动定义这些函数,编译器会自动生成一个...static成员依次拷贝到正在创建的对象中,其中内置类型会直接拷贝,数组会被逐元素地拷贝,类类型会调用拷贝构造函数来拷贝 拷贝初始化我们认为发生了拷贝时会进行,例如等号赋值,对象作为实参传递,对象非引用返回...static的成员调用成员析构 类的初始化是先初始化成员然后执行构造函数,类的销毁是先执行析构然后销毁成员 析构函数没有参数列表,所以成员销毁的行为完全依赖于成员自己 析构会在变量离开作用域或母构件销毁销毁...,动态分配的对象指针需要手动delete销毁,临时对象表达式执行完的时候销毁 类应该被看作一个整体,“三五法则”就是指当一个类需要析构函数,我们几乎肯定也要定义好拷贝和赋值函数,拷贝函数和赋值函数两者又是绑定出现的...只有当一个类没有任何自己定义的拷贝操作且所有非static成员都可移动才会生成合成的移动构造函数,内置成员和有移动构造函数对象是可移动的 和拷贝不同,移动操作不会被隐式定义为删除,我们也可以显式要求

75130
领券