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

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

一、全局函数 与 成员函数 相互转化 1、成员函数转为全局函数 - 多了一个参数 C++ 编译器 , 在编译阶段会将 C++ 成员函数 转为 全局函数 , 转换时 , 会 增加一个参数参数列表开始为止..., 这个增加参数对象本身指针 ; 在 Student , 定义了如下函数 : // 成员函数 转为 全局函数 , 多了一个参数 Student* pThis 作为第一个参数 void..., 就是通过 this 指针隐藏左操作数 , 对象本身 就是 左操作数 , 在成员函数 , 通过 this 指针访问对象本身成员 ; 在全局函数 , 实现两个 Student 相加 , 接收两个...; 如下带参数构造函数 , 并且为其 有参构造函数 参数 设置一个默认值 , 此时就可以使用 对象方式定义对象变量 ; class Student { public: // 带参构造函数...返回一个匿名对象 , 匿名对象 是在 成员函数 中新创建对象 ; // 成员函数, 将两个 Student 对象相加 // 全局函数 转为 成员函数 , 少了一个参数 // 返回一个

18720

C++基础-对象

面向对象编程有四个重要基础概念:抽象、封装、继承和多态。本文整理 C++ 对象基础内容,涉及抽象和封装两个概念。《C++基础-继承》一文讲述继承概念。《C++基础-多态》一文讲述多态概念。...同理,软件设计,如果不使用各种抽象层次,那么这一堆代码将变得无法理解无法维护甚至根本无法设计出来。 封装 抽象是从一种高层视角来看待一个对象。...当用户未给出任何构造函数时,编译器会自动生成一个构造函数,叫作合成默认构造函数,此函数数据成员初始化规则如下: 1) 若数据成员存在初始化值,则用这个初始化值来初始化数据成员 2) 否则...所以这里 str 是通过调用复制构造函数进行初始化实参进行了深复制。形参与实参指针成员各指向自己缓冲区。 所以析构是正常,示例程序运行没有问题。...将关键字 static 用于成员函数(方法)时,方法将在所有成员之间共享。 将 static 用于函数声明局部变量时,变量值将在两次调用之间保持不变。

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

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

带有默认构造函数,如果一个没有任务构造函数派生派生自一个带有默认构造函数基,那么派生会合成一个构造函数调用上一层基默认构造函数; 3) 带有一个虚函数 4) 带有一个虚基...在C/C++函数参数扫描是从后向前。...126、C++成员访问权限和继承权限问题 1) 三种访问权限 ① public:用关键字修饰成员表示公有成员成员不仅可以在内可以被 访问,在外也是可以被访问,是对外提供可访问接口...,指针是在构造函数初始化,所以没有构造函数的话指针无法被初始化; 4) 带有一个虚基 还有一点需要注意是: 1) 并不是任何没有构造函数都会合成一个构造函数 2) 编译器合成出来构造函数并不会显示设定一个成员变量...1) 当初始化一个引用成员变量时; 2) 初始化一个const成员变量时; 3) 当调用一个构造函数,而构造函数拥有一组参数时; 4) 当调用一个成员构造函数,而他拥有一组参数; 5)

2.2K30

《挑战30天C++入门极限》C++面向对象编程入门:构造函数与析构函数

一个教程我们简单说了关于一些基本内容,对于对象成员初始化我们始终是建立成员函数然后手工调用该函数对成员进行赋值,那么在c++对于来说有没有更方便方式能够在对象创建时候就自动初始化成员变量呢...关于c++成员初始化,有专门构造函数来进行自动操作而无需要手工调用,在正式讲解之前先看看c++构造函数一个基本定义。   ...2.若没有提供任何构造函数,那么c++提供自动提供一个默认构造函数,默认构造函数是一个没有参数构造函数,它仅仅负责创建对象而不做任何赋值操作。   ...c++规定如果一个对象是另外一数据成员,那么在创建对象时候系统将自动调用那个构造函数。   下面我们看一个例子。   ...前面我们已经简单说了构造函数和析构函数,我们知道一个成员可以是另外一个对象,构造函数允许带参数,那么我们可能会想到上面的程序我们可以在把Studentteacher成员用带参数形式调用

64230

Effective C++笔记

C++一个语言联邦 C++并不是一个带有一组守则一体语言:它是从四个次语言(C, Object-Oriented C++, Template C++ 以及 STL)组成联邦政府,每个语言都有自己规约...成员函数有着实质等价实现时,令non-const版本调用const版本可避免代码重复 4.确定对象被使用前已被初始化 为内置型对象进行手工初始化,因为C++不保证初始化它们 构造函数最好使用成员初始值列...初值列列出成员变量,其排列次序应该和它们在class声明次序相同 为免除“跨编译单元之初始化次序”问题,请以local static对象替换non-local static对象 5....为多态基声明virtual析构函数 带有多态性质应该声明一个virtual析构函数。...考虑写出一个不抛出异常swap函数 当std:swap类型效率不高时,提供一个swap成员函数,并确定这个函数不抛出异常 如果你提供一个member swap,也提供一个non-member

80320

一文让你学完C++,干货收藏!!!

当执行离开一个范围时,所有在范围创建自动对象都会被销毁。 C++ 提供了下列控制语句。...用于指定对象形式,它包含了数据表示法和用于处理数据方法。数据和方法称为成员。函数在一个中被称为成员C++ 定义 定义一个,本质上是定义一个数据类型蓝图。...在对象作用域内,公共成员外部是可访问。也可以指定成员为 private 或 protected。 定义 C++ 对象 提供了对象蓝图,所以基本上,对象是根据来创建。...数据抽象实例 C++ 程序,任何带有公有和私有成员都可以作为数据抽象实例。...数据封装实例 C++ 程序,任何带有公有和私有成员都可以作为数据封装和数据抽象实例。

3.3K20

一文让你学完C++,干货收藏!!!

当执行离开一个范围时,所有在范围创建自动对象都会被销毁。 C++ 提供了下列控制语句。...用于指定对象形式,它包含了数据表示法和用于处理数据方法。数据和方法称为成员。函数在一个中被称为成员C++ 定义 定义一个,本质上是定义一个数据类型蓝图。...在对象作用域内,公共成员外部是可访问。也可以指定成员为 private 或 protected。 定义 C++ 对象 提供了对象蓝图,所以基本上,对象是根据来创建。...数据抽象实例 C++ 程序,任何带有公有和私有成员都可以作为数据抽象实例。...数据封装实例 C++ 程序,任何带有公有和私有成员都可以作为数据封装和数据抽象实例。

2.9K3029

一文让你学完C++,干货收藏!!!

当执行离开一个范围时,所有在范围创建自动对象都会被销毁。 C++ 提供了下列控制语句。...用于指定对象形式,它包含了数据表示法和用于处理数据方法。数据和方法称为成员。函数在一个中被称为成员C++ 定义 定义一个,本质上是定义一个数据类型蓝图。...在对象作用域内,公共成员外部是可访问。也可以指定成员为 private 或 protected。 定义 C++ 对象 提供了对象蓝图,所以基本上,对象是根据来创建。...数据抽象实例 C++ 程序,任何带有公有和私有成员都可以作为数据抽象实例。...数据封装实例 C++ 程序,任何带有公有和私有成员都可以作为数据封装和数据抽象实例。

2.3K20

2W五千字C++基础知识整理汇总

当执行离开一个范围时,所有在范围创建自动对象都会被销毁。 C++ 提供了下列控制语句。...用于指定对象形式,它包含了数据表示法和用于处理数据方法。数据和方法称为成员。函数在一个中被称为成员C++ 定义 定义一个,本质上是定义一个数据类型蓝图。...在对象作用域内,公共成员外部是可访问。也可以指定成员为 private 或 protected。 定义 C++ 对象 提供了对象蓝图,所以基本上,对象是根据来创建。...数据抽象实例 C++ 程序,任何带有公有和私有成员都可以作为数据抽象实例。...数据封装实例 C++ 程序,任何带有公有和私有成员都可以作为数据封装和数据抽象实例。

2.6K10

C++基础——C++面向对象之数据封装、数据抽象与接口基础总结

1 数据封装         数据封装是一种把数据和操作数据函数捆绑在一起机制,在 C++程序,任何带有公有和私有成员都可以作为数据封装和数据抽象实例。...:" << people.getApple() << endl; } 程序,在People构造函数初始化了total为0,一般都是在构造函数初始化,而非在内直接赋初值,可能会有编译器不支持情况...3 接口(抽象C++面向对象很多特征都跟Java太类似了,这个接口也不例外。         接口描述了行为和功能,而不需要完成特定实现。...C++ 接口是使用抽象来实现(抽象与数据抽象互不混淆,数据抽象是一个把实现细节与相关数据分离开概念)。 如果类至少有一个函数被声明为纯虚函数,则这个就是抽象。...程序,任何带有公有和私有成员都可以作为数据封装和数据抽象实例,接口(抽象)描述了行为和功能,而不需要完成特定实现。

65830

CC++开发基础——对象与构造析构

public: 成员可以被外部成员函数访问。 private: 成员可以被同一个成员函数访问,或者被友元函数访问,修饰符可以禁止一些针对成员高风险操作。...(tmpmin) //初始化列表 { Second = tmpsec; //函数体赋初值 } 初始化列表变量初始化顺序是按照变量在定义顺序来操作,先被定义初始化。...5、特殊情况,只有一个参数构造函数,容易发生隐式类型转换 如果构造函数只有一个参数,则将对象初始化一个参数类型相同值时,构造函数将被调用。...1.如果对象是动态变量,则当执行完定义对象代码块时,就会调用对象析构函数。...2.如果对象是静态变量,则在整个程序运行结束时,才调用对象析构函数。 3.如果对象是用new创建,则仅当显式调用delete删除对象时,才调用对象析构函数。

24530

闭关多日,整理一份C++那些重要又容易忽视细节

使用引用参数这种“大招”主要动机有: 1、程序员能够修改调用函数数据对象 2、可以提高程序运行速度。 那么,什么时候使用指针,什么时候使用引用,什么时候使用按值传递呢?...数据对象是对象,使用const引用。设计语义常常要求使用引用,因此,在传递对象参数标准方式是按引用传递。 对于修改调用函数数据函数: 如果数据对象是内置数据类型,使用指针。...如果对象是数组,只能使用指针。 如果对象是结构,使用指针或引用都可以。 如果对象是对象,使用引用。 ---- 控制对成员访问,是公有?是私有? 新手来说,这个点估计是经常被忽略吧。...虚函数表存储了为对象进行声明虚函数地址。 例如,基对象包含一个指针,指针指向基中所有虚函数地址表。派生对象包含一个指向独立地址表指针。...我看到一段比较好解答: 我们已知具有封装和信息隐藏特性。只有成员函数才能访问私有成员,程序其他函数是无法访问私有成员

58210

数据结构与算法C++常用语法

C++    数据结构大都用来存储数据(通常是相同类型项集合)对象,并且提供处理这些集合函数。   1.1 基本class语法     在C++成员(member)构成。...成员可以是数据,也可以是函数,其中函数成为成员函数(member function)。一个实例都是一个对象。...每一个对象包含中指定数据成员(除非这些数据成员是static,否则这是一个可以暂时安全忽略细节)。成员函数作用域对象,通常被称为方法(method)。     以下是IntCell一个例子。...在IntCell,IntCell一个实例(IntCell对象)都包含一个称为storedValue数据成员。这个其他部分是方法。...另外,如果一个数据成员是不具有零参数构造函数类型,那么,数据成员也必须在初始化列表进行初始化。   3)explicit构造函数   IntCell构造函数explicit

79810

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

对象是对象常量,定义格式如下: class A: const A a: A const a: 定义常对象时,同样要进行初始化,并且对象不能再被更新。...当一个为另一个成员变量时,如何其进行初始化?...构造函数没有返回值,那么如何得知对象是否构造成功? 这里“构造”不单指分配对象本身内存,而是指在建立对象时做初始化操作(如打开文件、连接数据库等)。...所以,在程序,不管对象类型如何转换,对象内部虚函数表指针都是固定,这样才能实现动态地对对象函数进行调用,这就是C++多态性原理。 纯虚函数指的是什么?...因为C++不支持友元函数继承,对于没有继承特性函数没有虚函数说法。 C++如何阻止一个被实例化? C++可以通过使用抽象,或者将构造函数声明为private阻止一个被实例化。

1.5K11

C++知识概要

) 派生自己构造函数 必须使用成员列表初始化四种情况 当初始化一个引用成员时 当初始化一个常量成员时 当调用一个构造函数,而它拥有一组参数时 当调用一个成员构造函数,而它拥有一组参数时...为什么 C++大小不为 0,不同编译器设置不一样,vs 设置为 1 C++标准指出,不允许一个对象(当然包括对象大小为 0,不同对象不能具有相同地址 带有虚函数 C++大小不为...这个过程分为两步,第一步执行operator new()函数,在堆搜索一块内存并进行分配;第二步调用构造函数构造对象 什么情况会自动生成默认构造函数 带有默认构造函数成员对象 带有默认构造函数...带有一个虚函数 带有一个虚基 合成默认构造函数,只有基对象成员对象会被初始化。...所有其他非静态数据成员都不会被初始化 如何消除隐式转换 C++中提供了 explicit 关键字,在构造函数声明时候加上 explicit 关键字,能够禁止隐式转换 如果构造函数只接受一个参数

1.1K20

【云+社区年度征文】一文带你彻底理解反射

所以,我们Java反射可以重新理解如下:反射就是程序在运行时,可以根据全限定名称,动态地加载该类,创建对象,并可以调用对象地任意属性和方法。 那么,问题来了,为什么要学习反射呢?...针对不同实例对象反射出对象是否是同一个呢?...主动引用 当虚拟机启动,先初始化main方法所在 new一个对象 调用静态成员(除了final常量)和静态方法 使用java.lang.reflect包方法进行反射调用 当初始化一个...上面的文章,我们讲解了如何获取运行时结构,如果我们要使用,必须创建对象 创建对象:调用Class对象newInstance()方法 必须有一个无参构造器,因为当操作时,若没有明确调用构造器...()方法 setAccessible作用是启动和禁用访问安全检查开关 参数值为true则指示反射对象在使用时用取消Java语言访问检查 使得原本无法访问私有成员也可以访问 参数值为false则指示反射对象应该实施

60210

C++学习知识点

编译器虚函数处理过程 C++数据成员是独立,每申明一次对象,就会为成员数据分配内存空间,所以成员数据变量存储在对象空间中,成员函数是编译阶段确定存储空间和地址,故成员函数对于不同对象是共享...编译器在编译阶段普通函数采用静态联编方式,即在程序编译连接阶段决定程序 操作调用(函数调用)与执行操作(函数)代码段之间映射关系。...对象赋给另外一个对象引用或者指针时,如何传递对象赋给另外一个对象引用或者对象时候,将调用被赋值拷贝构造函数。此时就存在深拷贝和浅拷贝。...附:C++中出现拷贝情况有三种: (1) 建立一个对象,并用另一个同类已有对象对象进行初始化。...关于C++运算符重载函数有多少个参数几点认识 (1)对于非成员运算符重载函数,若运算符为单目的,则有一个参数;若运算符为双目的,则有两个参数

1.7K20

现代C++之constexpr

(2)C++14只要保证返回值和参数是字面值就行了,函数体可以加入更多语句,方便了更灵活计算。 它字面意思是 constant expression,常量表达式。...const函数必须是成员函数(方法,运算符),其中const关键字应用意味着方法无法更改其成员(非静态)字段值。例如。...如果将编译时常量作为参数传递,则它将一个函数(成员或非成员)标记为可以在编译时求值函数。例如,您可以编写此代码。...+ by Scott Meyers about constexpr: constexpr 对象是const,在编译期间使用已知初始化; constexpr 函数当使用在编译期间已知参数调用时,constexpr...这是因为 ODR(下面的one definition rule)-use 静态常量也需要有一个定义,在没有内联变量之前需要在某一个源代码文件(非头文件)这样写: const int magic::

1.2K20

C++面试题

C++顶层const和底层const? 顶层 const 表示指针本身是个常量; 底层 const 表示指针所指对象是一个常量。 12. 拷贝初始化、直接初始化、列表初始化?...直接初始化实际上是要求编译器使用普通函数匹配来选择与我们提供参数最匹配构造函数。 拷贝初始化实际上是要求编译器将右侧运算对象拷贝到正在创建对象,通常用拷贝构造函数来完成。...C++11标准{}初始化方式是聚合类型初始化,是以拷贝形式来赋值C++面向对象 1....2) 假设进程A在共享内存中放入了数个容器,进程B如何找到这些容器呢? 一个方法就是进程A把容器放在共享内存的确定地址上(fixed offsets),则进程B可以从已知地址上获取容器。...原则规定,在批量初始化过程。要么产生全部必要元素。要么不产生一个元素,即要么不做,做了就做好做全。

1.7K42
领券