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

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

, 这个增加参数是 对象本身指针 ; Student 中 , 定义了如下函数 : // 成员函数 转为 全局函数 , 多了一个参数 Student* pThis 作为第一个参数 void...Student* pThis 列表开始位置 ; 详细代码 , 参考最后完整代码示例 ; 2、全局函数转为成员函数 - 通过 this 指针隐藏操作数 全局函数转为成员函数 , 需要隐藏一个参数..., 就是通过 this 指针隐藏左操作数 , 对象本身 就是 左操作数 , 成员函数中 , 通过 this 指针访问对象本身成员 ; 全局函数中 , 实现两个 Student 相加 , 接收两个...; } 详细代码 , 参考最后完整代码示例 ; 二、有参构造函数设置默认参数值 ---- 为 Student 定义了有参构造函数 , 则其默认无参构造函数 , 就不会生成 ; // 带参构造函数...; 如下带参数构造函数 , 并且为其 有参构造函数 参数 设置一个默认值 , 此时就可以使用 名 对象名 方式定义对象变量 ; class Student { public: // 带参构造函数

17720

【C++】继承 ⑥ ( 继承中构造函数和析构函数 | 类型兼容性原则 | 父指针 指向 子类对象 | 使用 子类对象 为 父对象 进行初始化 )

地方 , 都可以使用 " 公有继承 " 派生 ( 子类 ) 对象 替代 , 该 派生 ( 子类 ) 得到了 除 构造函数 和 析构函数 之外 所有 成员变量 和 成员方法 ; 功能完整性 :..." 私有继承 " 派生 , 是 不具有 基 完整功能 , 因为 最终继承 派生 , 无法 外部调用 父 公有成员 和 保护成员 ; 2、类型兼容性原则应用场景 " 类型兼容性原则..." 应用场景 : 直接使用 : 使用 子类对象 作为 父对象 使用 ; 赋值 : 将 子类对象 赋值给 父对象 ; 初始化 : 使用 子类对象 为 父对象 初始化 ; 指针 : 父指针 指向...子类对象 , 父指针 值为 子类对象 堆内存 地址 , 也就是 将 子类对象 地址 赋值给 父类型指针 ; 引用 : 父引用 引用 子类对象 , 将 子类对象 赋值给 父类型引用 ; 二...// 通过父指针调用父函数 p_parent->funParent(); // 将指向子类对象指针传给接收父指针函数 // 也是可以 fun_pointer

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

C++知识概要

中,静态成员可以实现多个对象之间数据共享,并且使用静态数据成员还不会破坏隐藏原则,即保证了安全性。因此,静态成员所有对象中共享成员,而不是某个对象成员。...) 派生自己构造函数 必须使用成员列表初始化四种情况 当初始化一个引用成员时 当初始化一个常量成员时 当调用一个基构造函数,而它拥有一组参数时 当调用一个成员构造函数,而它拥有一组参数时...另外,virtual 函数不同类型对象产生不同动作,现在对象还没有产生,也就不能使用 virtual 函数来完成你想完成动作 析构函数为什么要虚函数 C++中基采用 virtual 虚析构函数是为了防止内存泄漏...指针没有初始化,释放没有置空,越界 悬空指针:一个指针指向对象已被删除,那么就成了悬空指针。...为什么拷贝构造函数必须传引用不能传值 拷贝构造函数作用就是用来复制对象使用这个对象实例来初始化这个对象一个新实例。

1.1K20

【C++】C++入门 — 和对象初步介绍

1 作用域 定义了一个新作用域,所有成员都在作用域中。体外定义成员时,需要使用 :: 作用域操作符指明成员属于哪个域。...有这样一个问题: Date中有 Init 与 Print 两个成员函数函数体中没有关于不同对象区分,那当d1调用默认构造函数时,该函数是如何知道应该设置today对象,而不是设置yesterday...只能在“成员函数内部使用 this指针本质上是“成员函数形参,当对象调用成员函数时,将对象地址作为实参传递给this形参。所以对象中不存储this指针。...this指针存在于哪里? C++中,this指针是一个隐含、非静态成员函数内部可用特殊指针,它指向当前正在调用该成员函数对象实例。...然而,在某些特定情况下,this指针确实可能为空,特别是不正确使用情况下,比如: 当对象尚未完全构造完成时,即在构造函数初始化列表结束前或进入构造函数主体之前访问this,这时行为是未定义,编译器不会阻止这样行为

9510

C++学习知识点

使用const修饰引用表示常引用,即引用变量是常变量,这样一来,是防止函数中对常引用修改,多用于修饰常对象。如果将值调用形参声明为常量,则没有多大使用价值。...为什么类型指针在被子类对象赋值不能访问子类成员函数呢?...如果只是简简单单进行浅拷贝,也就是值拷贝,会出现一个对象被析构,另一个对象成员变量,比如指针会指向被释放内存空间,这就是指针悬挂问题。此时就需要手动书写拷贝构造函数,完成深拷贝。...对于定义对象什么时候用new,什么时候不用new认识 (1) 构造函数只适用于成员初始化,与分配对象空间无关; (2) 隐式执行默认构造函数,初始化申明栈上对象,直接申明,不要使用...(3) 显式执行重载构造函数,初始化申明栈上对象,直接申明,不要使用new,如GPR gpr= GPR(6),其中GPR构造函数是GPR(int i){}; (4) new申明指针

1.7K20

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

67、成员初始化方式?构造函数执行顺序 ?为什么成员初始化列表会快一些? 1) 赋值初始化,通过函数体内进行赋值初始化;列表初始化,冒号使用初始化列表进行初始化。...也就是说,即使你没有写上this指针,编译器在编译时候也是加上this,它作为非静态成员函数隐含形参,对各成员访问均通过this进行 this指针使用 一种情况就是,非静态成员函数中返回对象本身时候...91、几个this指针易混问题 A. this指针是什么时候创建? this成员函数开始执行前构造成员执行结束清除。...this指针调用之前生成,至于“实例函数”,没有这个说法。实例化时,只分配变量空间,并没有函数分配空间。...当然,成员函数里,你是可以知道this指针位置(可以通过&this获得),也可以直接使用它。 F.每个编译,是否创建一个函数表保存函数指针,以便用来调用函数

2.3K40

CC++面试常问题集(2)

一,构造函数  构造方法用来初始化对象,与父其它成员不同,它不能被子类继承(子类可以继承父所有的成员变量和成员方法,但不继承父构造方法)。...因此,创建子类对象时,为了初始化从父继承来数据成员,系统需要调用其父构造方法。 二,析构函数  析构函数也不会被子类继承,只是子类析构函数中会调用父析构函数。...C++,有五种函数不能被声明成虚函数,分别是:非成员函数构造函数、静态成员函数、内联成员函数、友元函数这五种,下面分别解释为什么这五种函数不能被声明成虚函数。 1....(2)指针初始化可以改变,即指向其它存储单元,而引用在进行初始化就不会再改变了。...返回类型为void*,必须强制类型转换对应类型指针,new则直接返回对应类型指针; 8、对于malloc分配内存,若在使用过程中内存分配不够或太多,这时可以使用realloc函数对其进行扩充或缩小,但是

1.1K10

C++之类和对象

C语言中是习惯先定义变量再使用),但是一般我们见到C++程序都是将成员函数写在成员变量前面,这是为什么呢?...但为什么大家更喜欢使用class来定义呢?因为struct定义时候默认权限是public,而class定义时候默认权限是private。一般来说,并不喜欢外可以访问到成员变量。...而this指针作为参数传递时是允许为空成员函数里也没有对this指针进行解引用。 代码2运行崩溃,因为成员函数中对this指针进行解引用了,而this指针是一个空指针。...,同样受域和访问限定符约束; 静态成员函数最特别的地方在于它没有那个隐藏this指针,所以我们调用时候不用传对象地址,因此可以直接使用域限定符直接调用,而不需要创建对象,就能直接访问到里面的静态成员变量...因为我们中定义这个函数,所以第一个参数默认为隐藏this指针,也就是左参数必须是对象,因此这个运算符应该要这样使用: 可以看到这样使用没有任何问题了,但是这样可读性不高,重载这个运算符又显得没有意义了

1.1K00

CC++常见面试知识点总结附面试真题—-20220326更新

用动态存储分配函数动态开辟空间,使用完毕未释放,结果导致一直占据该内存单元即为内存泄露。 1). 使用时候要记得指针长度. 2). malloc时候得确定在那里free. 3)....C++程序中调用被C编译器编译函数为什么要加extern“C”?...没有任何构造函数时,编译器会自动生成默认构造函数,也就是无参构造函数;当没有拷贝构造函数时,会生成默认拷贝构造函数。 2)....是否需要定义拷贝构造函数原则是,是否有成员调用了系统资源,如果定义拷贝构造函数,一定是定义深拷贝,否则没有意义。...拷贝构造函数目的是用其它对象数据来初始化当前对象,并没有期望更改其它对象数据,添加 const 限制,这个含义更加明确了。

1.4K10

C++this指针,静态成员,友元函数友元

---- 1. this指针 在上篇讲C++中,对象,封装,继承(派生),多态时候,this指针出现在成员函数中,并使用->成员提取符操作成员变量。... C++ 中,每一个对象都能通过 this 指针来访问自己地址,this 指针是所有成员函数隐含参数,实际上成员函数默认第一个参数为T* const register this,this指针成员函数开始执行前构造...,成员执行结束清除。...所以this指针不能在静态函数使用,静态函数如同静态变量一样,他不属于具体哪一个对象,静态函数表示了整个范围意义上信息,而this指针却实实在在对应一个对象,所以this指针不能被静态函数使用...而静态成员无需构造对象情况下,可以使用名访问。

1.4K10

Java面试基本问题

而且,它没有返回类型,并且创建对象时会自动调用它。 有两种类型构造函数: 默认构造函数Java中,默认构造函数是不接受任何输入构造函数。...Singleton一个给定时间一个JVM中只能创建一个实例。可以通过将构造函数设为私有来使成为单例。 Q8。Java中数组列表和向量有什么区别? 数组列表 向量 阵列列表未同步。...为什么Java中不使用指针? Java不使用指针,因为它们不安全并且会增加程序复杂性。由于Java以其简单代码而闻名,因此添加指针概念将是矛盾。...Java中,访问修饰符是特殊关键字,用于限制对另一个构造函数,数据成员和方法访问。...最终变量可以不同上下文中使用,例如: 最终变量 当final关键字与变量一起使用时,其值一旦分配就无法更改。如果没有值分配给最终变量,则仅使用构造函数可以将值分配给它。

1.1K20

【1】进大厂必须掌握面试题-Java面试-基础

而且,它没有返回类型,并且创建对象时会自动调用它。 有两种类型构造函数: 默认构造函数Java中,默认构造函数是不接受任何输入构造函数。...Singleton一个给定时间一个JVM中只能创建一个实例。可以通过将构造函数设为私有来使成为单例。 Q8。Java中数组列表和向量有什么区别? 数组列表 向量 阵列列表未同步。...为什么Java中不使用指针? Java不使用指针,因为它们不安全并且会增加程序复杂性。由于Java以其简单代码而闻名,因此添加指针概念将是矛盾。...Java中,访问修饰符是特殊关键字,用于限制对另一个构造函数,数据成员和方法访问。...最终变量可以不同上下文中使用,例如: 最终变量 当final关键字与变量一起使用时,其值一旦分配就无法更改。如果没有值分配给最终变量,则仅使用构造函数可以将值分配给它。

1.7K00

c++和继承面试点25连问

运行时多态简单来讲就是:使用指针或者引用指向一个派生对象,非虚继承情况下,派生直接继承基虚表指针,然后使用派生函数去覆盖基函数,这样派生对象通过虚表指针访问到函数就是派生函数了...由成员变量和是否有虚函数决定,如果类中有虚函数,那就在所有成员变量基础上加上一个虚函数指针大小,64位机器中,虚函数指针为8个字节,注意计算大小时候要考虑字节对齐问题。...,结合我们知道,如果使用了空指针,就会发生段错误,那这里肯定也会发生段错误,但实际上编译执行没有产生错误,print函数被正确执行了,这就很尴尬了,这是为什么呢?...这个,并且此时因为print函数没有使用CPeople任何成员,它当然可以正常执行。...,因为成员函数是公用,但是成员变量却是每个对象独有的,没有为people分配空间,就是没给成员变量分配空间,且此时people为空指针,那给成员函数传入隐形this指针也是空指针,它怎么可能访问到某个成员变量呢

90410

C++ 核心编程

a为什么func(a); 为什么调用没有const方法。...构造函数语法:名(){} 构造函数没有返回值也不写void 函数名称与名相同 构造函数可以有参数,因此可以发生重载 程序调用对象时候会自动调用构造,无须手动调用,而且只会调用一次 析构函数语法:...this指针不需要定义,直接使用即可 this指针用途: 当形参和成员变量同名时,可用this指针来区分 非静态成员函数中返回对象本身,可使用return *this。...C++中空指针也是可以调用成员函数,但是也要注意有没有用到this指针 如果用到this指针,需要加以判断保证代码健壮性。...const修饰成员函数函数成员函数加const我们称为这个函数为常函数函数内不可以修改成员属性 成员属性声明时加关键字mutable函数中依然可以修改 void showPerson

2.1K20

Java面试基本问题

而且,它没有返回类型,并且创建对象时会自动调用它。 有两种类型构造函数: 默认构造函数Java中,默认构造函数是不接受任何输入构造函数。...Singleton一个给定时间一个JVM中只能创建一个实例。可以通过将构造函数设为私有来使成为单例。 Q8。Java中数组列表和向量有什么区别? 数组列表 向量 阵列列表未同步。...为什么Java中不使用指针? Java不使用指针,因为它们不安全并且会增加程序复杂性。由于Java以其简单代码而闻名,因此添加指针概念将是矛盾。...Java中,访问修饰符是特殊关键字,用于限制对另一个构造函数,数据成员和方法访问。...最终变量可以不同上下文中使用,例如: 最终变量 当final关键字与变量一起使用时,其值一旦分配就无法更改。如果没有值分配给最终变量,则仅使用构造函数可以将值分配给它。

1.1K50

构造与析构时候...

关于虚函数部分不在这篇再提,上一篇提过了。 文章目录 什么时候会调用默认构造函数 什么时候调用拷贝构造函数? 什么时候调用赋值运算符? 深拷贝与浅拷贝 成员初始化列表概念,为什么用它会快一些?...C++中struct和class区别 什么时候会调用默认构造函数 1、当不使用任何初始值定义一个非静态变量时,会调用该类默认构造函数。...A a; 2、当B含有A对象,并且使用B默认构造函数时,会调用A默认构造函数。...---- 成员初始化列表概念,为什么用它会快一些? 构造函数中,不在函数体内对成员变量赋值,而是构造函数花括号前面使用冒号和初始化列表赋值。...用初始化列表会快一些原因是,对于类型,它少了一次调用构造函数过程,而在函数体中赋值则会多一次调用。而对于内置数据类型则没有差别。

62120

再探虚函数

2、纯虚函数中声明函数,它在基没有定义,但要求任何派生都要定义自己实现方法。中实现纯虚函数方法是函数原型加"=0" 3、声明了纯虚函数是一个抽象。...---- Q7:构造函数和析构函数可以调用虚函数吗,为什么?...所以调用基析构函数时,派生对象数据成员已经销毁,这个时候再调用子类函数没有任何意义。 ---- Q8:静态函数能定义为虚函数吗?...1、static成员不属于任何对象或实例,所以即使给此函数加上virutal也是没有任何意义。 2、静态与非静态成员函数之间有一个主要区别,那就是静态成员函数没有this指针。...vptr是一个指针构造函数中创建生成,并且只能用this指针来访问它,因为它是一个成员,并且vptr指向保存虚函数地址vtable.对于静态成员函数,它没有this指针,所以无法访问vptr

85120

NeilBlog

静态成员变量可以被所有成员函数访问,包括非静态成员函数和静态成员函数。 静态成员函数: 静态成员函数没有this指针,因为静态成员函数属于本身,而不是任何具体对象。...上面也提到了this指针,下面也来讲讲 关于静态成员函数没有this指针,这是因为this指针是一个指向调用成员函数具体对象指针。但是静态成员函数不属于任何具体对象,它属于本身。...所以,静态成员函数没有this指针。这也意味着静态成员函数只能访问静态成员变量,不能访问非静态成员变量,因为非静态成员变量是属于具体对象。...C++中,this指针是一个特殊指针,它指向调用成员函数那个对象。你可以非静态成员函数使用this指针来访问调用该函数对象成员。...this指针并不是printValue函数参数,而是成员函数被调用时自动提供成员函数内部,你可以使用this指针来访问调用该函数对象成员

6010

计算机考研复试C语言常见面试题「建议收藏」

为什么C++默认析构函数不是虚函数 8 17、函数指针 9 18、fork函数 9 19、构造和析构顺序 9 20、静态函数和虚函数区别 10 21、静态多态与动态多态 10 22、const修饰普通函数成员函数目的...对一个成员变量和成员函数来说,加了static关键字,则此变量/函数没有了this指针了,必须通过名才能访问。...中实现纯虚函数方法是函数原型加“=0” 如:virtual void funtion1()=0 如果A中virtual去掉以后,以上结果将会是Afoo 16、为什么析构函数必须是虚函数...为什么C++默认析构函数不是虚函数 析构函数设置为虚函数可以保证我们new一个子类时,可以使用指针指向该子类对象,释放基指针时可以释放掉子类空间,防止内存泄漏。...19、构造和析构顺序 构造: 基成员对象构造函数构造函数 子类成员对象构造函数 子类构造函数 析构: 子类析构函数 子类成员析构函数析构函数成员析构函数 两者正好相反

1.5K30
领券