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

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

C++中this指针是一个指向当前对象指针。成员函数中,可以使用this指针来访问调用函数对象成员变量和成员函数。...一、定义和使用this指针 this指针是成员函数内部定义一个常量指针。存储了当前对象地址,可以通过访问当前对象成员变量和成员函数。...这里使用了*this来访问调用函数对象。 三、作为函数参数this指针 this指针也可以作为函数参数传递。这种情况下,可以函数内部访问其他对象成员变量和成员函数。...getName函数内部,使用了this指针访问调用函数对象成员变量name。...四、总结 this指针C++中是一个非常重要概念,可以用来访问调用函数对象,作为返回值返回,或者作为函数参数传递。掌握this指针使用可以帮助我们更好地编写面向对象程序。

18240

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

一、全局函数成员函数 相互转化 1、成员函数转为全局函数 - 多了一个参数 C++ 编译器 , 在编译阶段会将 C++ 成员函数 转为 全局函数 , 转换时 , 会 增加一个参数到参数列表开始为止..., 这个增加参数是 对象本身指针 ; Student 类中 , 定义了如下函数 : // 成员函数 转为 全局函数 , 多了一个参数 Student* pThis 作为第一个参数 void..., 对象本身 就是 左操作数 , 成员函数中 , 通过 this 指针访问对象本身成员 ; 全局函数中 , 实现两个 Student 类相加 , 接收两个 Student 引用类型参数 , 引用相当于一级指针...执行 Student 构造函数" << endl; } 此时 , 如果要创建 Student 对象 , 只能调用上述 有参构造函数 , 如果使用 Student s2 方式调用 默认构造函数 创建..., 将 两个 Student 对象相加 , 返回是一个匿名对象 , 该匿名对象 成员函数 中新创建对象 ; // 成员函数中, 将两个 Student 对象相加 // 全局函数 转为 成员函数

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

C++知识概要

但是当局部静态变量离开作用域后,并没有销毁,而是仍然驻留在内存当中,只不过我们不能再对进行访问,直到该函数再次调用,并且该过程中值保持不变。...静态变量初始化 静态局部变量和全局变量一样,数据都存放在全局区域,所以主程序之前,编译器已经为其分配好了内存。 C++ 中,初始化是执行相关代码时才会进行初始化。...) 派生类自己构造函数 必须使用成员列表初始化四种情况 当初始化一个引用成员时 当初始化一个常量成员时 当调用一个基类构造函数,而拥有一组参数时 当调用一个成员构造函数,而拥有一组参数时...对象创建时候要自动执行构造函数,消亡之前调用析构函数。...弱引用并不对对象内存进行管理,功能上类似于普通指针,然而一个比较大区别是,弱引用能检测到所管理对象是否已经释放,从而避免访问非法内存

1.1K20

C++面试题

,其生命周期一直持续到整个程序执行结束,static修饰全局变量,全局变量本源文件中被访问到,也可以同一个工程其它源文件中被访问;extern用在变量或者函数声明前,用来说明“此变量/函数是在别处定义...虚函数作用在于通过父类指针或者引用来调用时候能够变成调用子类那个成员函数。而构造函数创建对象时自动调用,不可能通过父类指针或者引用去调用,因此也就规定构造函数不能是虚函数。...当一个构造函数调用时,首要事情之一是初始化VPTR。因此,只能知道它是“当前”类,而完全忽视这个对象后面是否还有继承者。...而且,只要它是最后构造函数调用,那么在这个对象生命期内,VPTR将保持初始化为指向这个VTABLE, 但如果接着还有一个更晚派生构造函数调用,这个构造函数又将设置VPTR指向 VTABLE...C++中,内存区分为5个:堆、栈、自由存储区、全局/静态存储区、常量存储区。new是自由存储区开辟内存。 C中,内存区分为堆、栈、全局/静态存储区、常量存储区。malloc是堆上开辟内存。

1.7K42

C++】类和对象核心总结

我们知道一个成员函数是可以多个对象调用,那成员函数怎么知道现在作用是哪个对象呢?万一有10个对象调用同一个函数函数只作用于第一个对象,这可怎么办啊?无法满足我们需求啊。 b....所以C++编译器给每个“非静态成员函数”增加了一个隐藏this指针来作为函数形参, 并且规定该参数必须在函数形参最左边位置,这个指针中存储就是对象地址,函数体中所有访问对象成员变量操作都是通过...1.类里面写一个共公有的函数,用于获取成员变量,然后全局重载里面调用这个公有函数,以这样方式来访问到私有的成员变量。...之前我们所学构造函数可以给新创建对象赋初值,这点我们是知道,但是并不是对成员变量初始化,而是赋值工作。 因为初始化只能初始一次,而构造函数赋值是可以赋值多次。...静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明 非static成员函数可以调用静态成员函数,因为非静态属于某个特定对象,而静态该类所有对象共享,那么通过某个具体对象访问所有对象共享内容当然是可以

67330

C++面试知识总结

C++程序内存布局与C程序布局类似,区别是C++不再区分全局变量和静态变量是否已经初始化,全部存储静态存储区;另外堆中存放new/delete申请释放资源,而malloc和free申请资源存放在自由存储区...2.18 static全局变量与普通全局变量区别 全局变量整个工程文件内都有效静态全局变量只定义文件内有效全局变量和静态变量如果没有手工初始化,则由编译器初始化为0。...2.19 static局部变量和普通局部变量区别 静态局部变量只定义函数有效,只是程序仅分配一次内存,函数返回后,该变量不会消失,直到程序运行结束后才释放。...深拷贝意味着拷贝了资源和指针 浅拷贝只是拷贝了指针,没有拷贝资源 3.7 构造函数特点 构造函数只在建立对象时候自动调用一次 构造函数必须是公共,否则无法生成对象 构造函数只负责为自己构造对象...模块内static全局变量可以模块内所用函数访问,但不能模块外其它函数访问模块内static函数只可被这一模块内其它函数调用,这个函数使用范围限制声明模块内。

1.7K41

C++基础知识

初始化:未经初始化全局静态变量会被自动初始化为 0(自动对象值是任意,除非他显式初始化); 作用域:全局静态变量声明仅在本文件可见,他文件之外是不可见,准确地说是从定义之处开始,到文件结尾...初始化:未经初始化全局静态变量会被自动初始化为 0(自动对象值是任意,除非他显式初始化); 作用域:作用域仍为局部作用域,当定义函数或者语句块结束时候,作用域结束。...但是当局部静态变量离开作用域后,并没有销毁,而是仍然驻留在内存当中,只不过我们不能再对进行访问,直到该函数再次调用,并且值不变; 3.静态函数 函数返回类型前加 static,函数就定义为静态函数...从中可看出,调用静态成员函数使用如下格式:::(); C++和C区别 设计思想上 C++是面向对象语言,而 C 是面向过程结构化编程语言 语法上 C++具有重载...而#2 不会留下悬挂 unique_ptr,因为调用unique_ptr 构造函数,该构造函数创建临时对象在其所有权让给 pu3 后就会被销毁。

1.4K32

C++笔试面试题整理

在所有函数体外定义全局量,加了static修饰符后不管在哪里都存放在全局区(静态区),在所有函数体外定义static变量表示该文件中有效,不能extern到别的文件用,函数体内定义static...操作系统和编译器通过内存分配位置来知道全局变量分配在全局数据段并且程序开始运行时候加载。局部变量则分配在堆栈里面。 与全局对象相比,使用静态数据成员有什么优势? 主要有以下所述两种优势。...对于非内部数据类型对象而言,光用maloc/free无法满足动态对象要求。对象创建同时要自动执行构造函数对象消亡之前要自动执行析构函数。...main函数执行以前,还会执行什么代码? 全局对象构造函数会在main函数之前执行。 全局变量和局部变量有什么区别?是怎么实现?操作系统和编译器是怎么知道?...静态函数存在意义? 静态私有成员类外不能访问,可通过类静态成员函数访问; 当类构造函数是私有的时,不像普通类那样实例化自己,只能通过静态成员函数调用构造函数

2.5K30

20道必须掌握C++面试题

答: 设计模式(Design pattern)是一套反复使用、多数人知晓、经过分类编目的、代码设计经验总结。 比如单例模式,保证一个类仅有一个实例,并提供一个访问全局访问点。...2、对于非内部数据类型对象而言,光用maloc/free无法满足动态对象要求。对象创建同时要自动执行构造函数对象消亡之前要自动执行析构函数。...答: (1)类静态数据成员在编译时创建并初始化:该类任何对象建立之前就存在,不属于任何对象,而非静态成员变量则是属于对象所有的。类静态数据成员只有一个拷贝,为所有此类对象所共享。...3、static 成员是命名空间属于类全局变量,存储 data 区rw段。 4、static 成员只能类外初始化。 5、可以通过类名访问(无对象生成时亦可),也可以通过对象访问。...在所有函数体外定义全局量,加了static修饰符后不管在哪里都存放在全局区(静态区),在所有函数体外定义static变量表示该文件中有效,不能extern到别的文件用,函数体内定义static

53420

CC++面试题之语言基础篇(一)

private:私有继承,派生类继承基类私有成员,这些成员派生类中变为私有的,不能外部访问。 C语言和C++区别 与C语言区别: C语言是面对过程,而C++是面对对象。...static第三个作用是默认初始化为0.和全局变量一样存储静态数据区。 说说静态变量什么时候初始化? 对于C语言全局静态变量,初始化发生在代码执行之前,属于编译期初始化。...对于C++全局静态对象对象首次用到时才进行构造静态局部变量,全局变量,局部变量特点 首先从作用域考虑: 全局变量:全局作用域,可以通过extern作用于其他非定义源文件。...结构体比较,怎么判断两个对象是否相等 需要逐个比较它们成员变量(字段) 继承关系中子类能访问父类哪些成员变量以及成员函数 继承关系中,子类(派生类)通常可以访问父类(基类)以下成员变量和成员函数...c++中A类访问B类中私有成员解决方法 使用友元函数或友元类:B类中声明A类为友元,或者A类中声明B类为友元 提供公有成员函数或接口:如果希望B类私有成员A类间接访问,可以B类中提供一些公有成员函数或接口

16610

C++基础闯关100题,你能闯多少?【2021超硬核大厂高频面试题】

全局/静态存储区,全局变量和静态变量分配到同一块内存中,以前C语言中,全局变量又分为初始化和未初始化C++里面没有这个区分了,他们共同占用同一块内存区。...,long等为0,bool为FALSE,指针为NULL等等,即.bss段内容 全局对象初始化,main之前调用构造函数,这是可能会执行前一些代码 将main函数参数argc,argv...模块内static全局变量可以模块内所用函数访问,但不能模块外其它函数访问模块内static函数只可被这一模块内其它函数调用,这个函数使用范围限制声明模块内; 类中...静态局部变量和全局变量一样,数据都存放在全局区域,所以主程序之前,编译器已经为其分配好了内存,但在C和C++静态局部变量初始化节点又有点不太一样。...所以C++标准定为全局静态对象是有首次用到时才会进行构造,并通过atexit()来管理。程序结束,按照构造顺序反方向进行逐个析构。所以C++中是可以使用变量对静态局部变量进行初始化

1.8K20

CC++中static变量和static函数用法

int ret = get_last_node(Head); …… } ———————————————————— 2.C++中静态成员数据和静态成员函数用法 静态成员数据: C++中如果某个变量属于类而并非属于某个对象的话...因为静态 成员数据不属于任何一个对象,所以他不能在构造函数中进行初始化(否则每定义一个对象就要 初始化一次),所以类定义时候就应该初始化。...(对于C++class对象例外, class对象实例如果不初始化, 则会自动调用默认构造函数,不管是否是static类型) 特点: static局部变量”记忆性”与生存期全局性” 所谓”记忆性...二、外部静态变量/函数 C中static有了第二种含义:用来表示不能其它文件访问全局变量和函数。, 但为了限制全局变量/函数作用域,函数或变量前加static使得函数成为静态函数。...注意此时,对于外部(全局)变量, 不论是否有static限制, 存储区域都是静态存储区, 生存期都是全局.此时static只是起作用域限制作用, 限定作用域本模块(文件)内部.

1.9K30

同时由于const类型无法自动转化为非const类型,所以const型对象只能调用const成员函数。 类作用域:类本身就是一个作用域,类中所有成员定义类这个作用域中。...只用调用类方法就好了,不用关注该如何设置数据成员 到此为止,书中提到了两种访问权限,public和private: public: 后定义成员可以整个程序内访问 private: 后定义成员只能在类成员函数中被访问...这个类声明之后,定义之前是一个不完全类型。不完全类型可以用于定义该类型指针或者引用,也可以声明以该类型作为参数或者返回该类型函数。 对一个类来说,创建对象之前必须定义。...c++ 中,内层作用域中同名成员会覆盖外层,当函数内部或者类内部定义了与全局作用域相同变量时,要使用全局作用域中变量可以使用:: 类构造函数相关 构造函数中初始化列表相当于先定义再赋值,而要做到对成员变量定义同时初始化...它们不包含this指针,静态函数成员不能声明成const类型,也不能在静态函数成员调用非类静态成员 不能在类内部初始化类静态成员,static关键字只能出现在类内部声明语句中,定义时候不能加

58210

《逆袭进大厂》第二弹之C++进阶篇59问59答(超硬核干货)

2) 模块内static全局变量可以模块内所用函数访问,但不能模块外其它函数访问; 3) 模块内static函数只可被这一模块内其它函数调用,这个函数使用范围限制声明模块内;...2) 静态局部变量和全局变量一样,数据都存放在全局区域,所以主程序之前,编译器已经为其分配好了内存,但在C和C++静态局部变量初始化节点又有点不太一样。...5、当一个构造函数调用时,首要事情之中一个是初始化VPTR。 因此,仅仅能知道它是“当前”类,而全然忽视这个对象后面是否还有继承者。...所以weak_ptr不保证指向内存一定是有效使用之前使用函数lock()检查weak_ptr是否为空指针。 (4) auto_ptr 主要是为了解决“有异常抛出时发生内存泄漏”问题 。...this作用域是类内部,当在类静态成员函数访问静态成员时候(全局函数静态函数中不能使用this指针),编译器会自动将对象本身地址作为一个隐含参数传递给函数

2.2K40

你们要C++面试题答案来了--基础篇

内存中位置:静态存储区 初始化:未经初始化全局静态变量会被自动初始化为0(自动对象值是任意,除非他显式初始化); 作用域:作用域仍为局部作用域,当定义函数或者语句块结束时候,作用域结束。...但是当局部静态变量离开作用域后,并没有销毁,而是仍然驻留在内存当中,只不过我们不能再对进行访问,直到该函数再次调用,并且值不变; 静态函数 函数返回类型前加static,函数就定义为静态函数。...,如果你要在多个cpp中复用该函数,就把声明提到头文件里去,否则cpp内部声明需加上static修饰; 类静态成员 类中,静态成员可以实现多个对象之间数据共享,并且使用静态数据成员还不会破坏隐藏原则...静态成员函数实现中不能直接引用类中说明静态成员,可以引用类中说明静态成员(这点非常重要)。如果静态成员函数中要引用非静态成员时,可通过对象来引用。...从中可看出,调用静态成员函数使用如下格式:::(); 说一下C++和C区别 参考回答: 设计思想上: C++是面向对象语言,而C是面向过程结构化编程语言 语法上

2.8K30

C++】static关键字及其修饰静态成员变量函数详解

其中bass段程序执行之前会被系统自动清0,所以未初始化全局变量和静态变量程序执行之前已经为0。存储静态数据区变量会在程序刚开始运行时就完成初始化,也是唯一一次初始化。... C++ 中 static 内部实现机制:静态数据成员要在程序一开始运行时就必须存在。因为函数程序运行中被调用,所以静态数据成员不能在任何函数内分配空间和初始化。....将构造函数封装起来是为了不让类外函数随便不按要求构造对象,如: 2.使用成员函数来创建类对象是因为成员函数调用函数不受访问限定符限制,如: 3.使用static修饰成员函数是因为要解决无类对象就无法调用成员函数问题...其次,我们函数创建一个n个Sum类数据数组,这意味着将要创建n个Sum类对象,则Sum构造函数会被调用n次。...最后,我们Sum构造函数里让_ret+=_i后让_i++,这样,创建一个类对象_ret就会加等次序,即从1一直加到n。

33510

static–静态变量与普通变量区别

2)任何一个static成员引用  3)如果类包含执行入口Main方法,此类static构造函数Main方法调用之前执行。  ...4)如果类包含任何staic成员,则这些static成员static构造函数之前进行初始化。  5)如果类包含任何static方法,则这些static方法static构造函数之后进行初始化。  ...2) 模块内(但在函数体外),一个声明为静态变量可以模块内所用函数访问,但不能模块外其它函数访问。它是一个本地全局变量。...3) 模块内,一个声明为静态函数只可被这一模块内其它函数调用。那就是,这个函数限制声明模块本地范围内使 C#中变量分为:全局变量、静态全局变量、局部变量和静态局部变量。...可以一个类中实现静态属性(字段)和静态方法,以此达到C或C++全局变量和全局函数效果。

68610

嵌入式软件工程师笔试面试指南-CC++

函数体,只会被初始化一次,一个声明为静态变量在这一函数调用过程中维持其值不变。 模块内(但在函数体外),一个声明为静态变量可以模块内所用函数访问,但不能模块外其它函数访问。...它是一个本地全局变量(只能当前文件使用)。 模块内,一个声明为静态函数只可被这一模块内其它函数调用。那就是,这个函数限制声明模块本地范围内使用(只能当前文件使用)。...(动态绑定是根据对象动态类型而不是函数名,调用构造函数之前,这个对象根本就不存在,怎么动态绑定?) C++中空类默认产生哪些类成员函数?...(2)友元类:类A中成员函数访问类B中私有或保护成员。 基类构造函数/析构函数是否派生类继承? 基类构造函数析构函数不能派生类继承。...首先想到C++ 中,子类构造函数会自动调用父类构造函数。同样,子类析构函数也会自动调用父类析构函数。要想一个类不能继承,我们只要把构造函数和析构函 数都定义为私有函数

1.5K11

硬核 | C++ 基础大全

作用二:修饰全部变量:对于一个全局变量,既可以本文件中被访问到,也可以同一个工程中其它源文件访问(添加 extern进行声明即可)。...全局变量可以模块内所用函数访问,但不能模块外其它函数访问模块内 static 函数只可被这一模块内其它函数调用,这个函数使用范围限制声明模块内; 类中 static 成员变量属于整个类所拥有...介绍 C++ 构造函数对象创建时,编译系统为对象分配内存空间,并自动调用构造函数,由构造函数完成成员初始化工作。 即构造函数作用:初始化对象数据成员。...派生类构造函数中,所有的虚基类及上一层基类构造函数调用对象 vptr 初始化; 如果有成员初始化列表,将在构造函数体内扩展开来,这必须在 vptr 设定之后才做; 执行程序员所提供代码;...有虚表,那么必须设定初值; 所有上一层基类构造函数必须调用; 所有虚基类构造函数必须调用

1.1K10

《逆袭进大厂》第三弹之C++提高篇79问79答

126、C++中类成员访问权限和继承权限问题 1) 三种访问权限 ① public:用该关键字修饰成员表示公有成员,该成员不仅可以类内可以 访问类外也是可以访问,是类对外提供访问接口...这两者存储方式上并无不同。这两者区别在于非静态全局变量作用域是整个源程序,当一个源程序由多个原文件组成时,非静态全局变量各个源文件中都是有效。...而静态全局变量则限制了其作用域,即只定义该变量源文件内有效同一源程序其它源文件中不能使用它。...vptr是一个指针,构造函数中创建生成,并且只能用this指针来访问,因为它是类一个成员,并且vptr指向保存虚函数地址vtable.对于静态成员函数没有this指针,所以无法访问vptr...对象,由于构造函数代码执行之前就对list对象完成了初始化,假设list构造函数里分配了内存,那么我们这么一做就破坏了list对象内存。

2.2K30
领券