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

C++面试知识总结

引用一旦被初始化为指向一个对象,它就不能被改变为另一个对象的引用。 指针在任何时候都可以改变为指向另一个对象。 引用的创建和销毁并不会调用的拷贝构造函数。...memcpy是内存拷贝函数,可以拷贝任何数据类型的对象。 strcpy只能拷贝字符串,遇到’\0′结束拷贝。 2.10 指针16位机,32位机,64位机中分别占多大内存 16位机:2字节。...3.5 基和子类的构造、析构顺序 定义一个对象时先调用基构造函数、然后调用派生构造函数 先派生的析构后基的析构,也就是说的的析构调用的时候,派生的信息已经全部销毁了 3.6 深拷贝与浅拷贝的区别...深拷贝意味着拷贝了资源和指针 浅拷贝只是拷贝了指针,没有拷贝资源 3.7 构造函数的特点 构造函数只在建立对象的时候自动被调用一次 构造函数必须是公共的,否则无法生成对象 构造函数只负责为自己的构造对象...中的static成员变量属于整个所拥有,对的所有对象只有一份拷贝。 中的static成员函数属于整个所拥有,这个函数不接收this指针,因而只能访问的static成员变量。

1.7K41

C++关键知识点梳理

,例如 int *const p1=&i,const int ci =42;底层指针:指针所指向的对象常量,const int *p2=&ci;常量中使用:对于不修改成员变量的成员函数,例如,get...操作的成员函数最好定义为常量成员函数常量对象常量对象的引用或指针都只能调用常量成员函数。...初始化列表常量和引用成员必须在初始化列表中初始化,因为这两成员不支持赋值操作,对象通过初始化列表初始化避免调用对象的默认构造函数进行初始化,因此效率更高。...是C++实现面向对象编程的三大特征:继承、封装、动态的方式之一;具备构造函数和析构函数构造函数/默认构造函数:控制对象的初始化过程,成员的初始化顺序与它们定义中出现的顺序一致。...设计的工具拷贝、赋值、销毁拷贝构造函数:将一个对象作为非引用实参、将一个非引用对象直接作为函数返回值、用花括号列表初始化一个数组或者一个成员时均使用了拷贝构造函数

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

C++ Primer ---(读书笔记)

的基本思想是 数据抽象 和 封装。数据抽象是一种依赖于 接口 和 实现 分离的编程艺术。的接口包含 用户所能执行的操作;的实现则包含 的数据成员,负责接口实现的函数体,以及各种私有函数。...常量对象,以及常量对象的指针或者引用都只能调用常量成员函数。...构造函数 通过一个或几个特殊的成员函数来控制其对象的初始化过程,这些特殊的函数就是构造函数构造函数的任务是初始化对象的数据成员,无论何时,只要对象被创建,就会执行构造函数。...当对象不再存在,比如当一个局部对象所在块结束时,会被销毁,数组或容器中被销毁时,其中存储的对象也会被销毁。...友元也是一样,一个中使用friend声明 另一个另一个了就可以访问该类中的成员了。同样,也可以让其他中的一个成员函数 来作为当前的友元函数,也是使用friend修饰一下。

48720

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

有了虚函数,基指针指向基对象时就使用基成员(包括成员函数成员变量),指向派生对象时就使用派生成员,从而实现多态。...const int *a,其中a为指向int型变量的指针,const * 左侧,表示a指向不可变常量。...当派生创建对象的时候会调用基构造函数,但是如果基构造函数是虚函数的话,派生构造函数又会把基构造函数覆盖,所以无法进一步执行而出错。...浅拷贝: 拥有指针成员中,一个对象利用拷贝构造函数或者赋值函数拷贝或者赋值给另一个对象的时候,直接将这个对象的指针成员赋值给另一个对象的指针成员,将一个指针赋值给另一个指针,就会使两个指针指向同一个空间...开放地址法:当关键字key的哈希地址p=H(key)出现冲突时,以p为基础,产生另一个哈希地址p1,如果p1仍然冲突,再以p为基础,产生另一个哈希地址p2,…,直到找出一个不冲突的哈希地址pi ,将相应元素存入其中

1.9K20

Java_内存分配

定义的静态成员 常量池:存放常量 非RAM(随机存取存储器)存储:硬盘等永久存储空间 ---- 前瞻: new出的空间都是作为动态内存在堆中分配的,比如new出的对象成员属性、使用new开辟的数组中的各个元素...,它的对象实体(成员属性)存储堆区,而对象(名)保存在栈区,是对堆区的成员属性的引用 num是new出来的一个数组,它的数据元素存储堆区,而数组(名)保存在栈区,是对堆区的数据元素的引用,数据元素又是...Point的对象,是堆区的成员属性的引用 常量存储常量池 ---- Java内存分配中的栈   函数中定义的一些基本类型的变量数据和对象的引用变量都在函数的栈内存中分配。...而数组对象本身在堆中分配,即使程序运行到使用 new 产生数组或者对象的语句所在的代码块之外,数组对象本身占据的内存不会被释放,数组对象没有引用变量指向它的时候,才变为垃圾,不能在被使用,但仍...除了包含代码中所定义的各种基本类型(如int、long等等)和对象型(如String及数组)的常量值(final)还包含一些以文本形式出现的符号引用,比如: 和接口的全限定名; 字段的名称和描述符;

47830

HotSpot 虚拟机对象探秘

:哈希码GC 分代年龄锁状态标志线程持有的锁偏向线程 ID偏向时间戳对象头可能包含类型指针,通过该指针能确定对象属于哪个。...如果对象是一个数组,那么对象头还会包括数组长度。实例数据实例数据部分就是成员变量的值,其中包括父成员变量和本类成员变量。对齐填充用于确保对象的总长度为 8 字节的整数倍。...对象的创建过程 图片加载检查虚拟机解析.class文件时,若遇到一条 new 指令,首先它会去检查常量池中是否有这个的符号引用,并且检查这个符号引用所代表的是否已被加载、解析和初始化过。...分配之时从空闲列表中找到一块足够大的内存空间划分给对象实例。这种方式称为“空闲列表”。 初始化分配完内存后,为对象中的成员变量赋上初始值,设置对象头信息,调用对象构造函数方法进行初始化。...至此,整个对象的创建过程就完成了。对象的访问方式 所有对象的存储空间都是中分配的,但是这个对象的引用却是堆栈中分配的。

12610

Java内存分配之堆、栈和常量

定义的静态成员 常量池:存放常量 非RAM(随机存取存储器)存储 java内存分配中的栈 函数中定义的一些基本类型的变量数据和对象的引用变量都在函数的栈内存中分配。...java内存分配中的堆 堆内存用来存放由new创建的对象数组中分配的内存,由java虚拟机的自动垃圾回收期来管理。...而数组对象本身在堆中分配,即使程序运行到使用new产生数组对象的语句所在的代码块之外,数组对象本身占据的内存不会被释放,数组对象没有引用变量指向他的时候,才变为垃圾,不能在被使用,但仍然占据内存空间不放...除了包含代码中所定义的各种基本类型(如int、long等等)和对象型(如String及数组)的常量值(final)还包含一些以文本形式出现的符号引用,比如: 和接口的全限定名; 字段的名称和描述符;...day,month,year为成员变量,它们存储堆中(new BirthDate()里面)。当BirthDate构造方法执行完之后,d,m,y将从栈中消失。

1.2K20

1小时掌握c++面向对象编程

图3-2 对象引用做函数参数 3.2 this指针 3.2.1 特点 该指针是隐含于每一个成员函数中的特殊指针 该指针指向正在被某个成员函数操作的对象 *this标识调用该成员函数对象 3.2.2...图3-13 常数据成员 3.8 子对象 当一个成员另一个对象时,该对象就为子对象对象对象成员中出现了子对象对象成员)时,该类的构造函数包含对子对象的初始化,通常采用成员初始化列表的方法来初始化子对象...图3-14 子对象 3.8.2 说明 子对象必须在成员初始化列表中初始化 建立一个对象时,它的所有子对象一起建立 先执行子对象构造函数,再执行对象构造函数体 析构函数的执行顺序与构造函数的执行顺序严格相反...构造函数的调用顺序仅与子对象中声明的顺序有关,而与成员初始化列表中给出的对构造函数的调用顺序无关 构造函数成员初始化列表中未给出对子对象的调用,则表示使用子对象的缺省构造函数 3.9 堆对象 程序运行过程中根据需要可以随时建立或删除的对象...A[5]; 使用new创建对象数组或一般数组时,不能为该数组指定初始值,其初始值为缺省值 使用new[]创建对象数组时,中必须说明缺省构造函数 3.9.3 delete运算符 删除用new创建的对象或一般类型的指针

57610

【Example】C++ 标准库常用容器全面概述

capacity 返回不分配更多的内存的情况下vector可以包含的元素数。(当前内存空间) cbegin 返回指向vector中起始位置的常量迭代器。...> name{value, value...}; std::array name = {value, value...}; 成员函数: 名称 说明 array 构造一个数组对象...value_comp 返回用于value_type类型的对象中比较键的函数。 运算符: 名称 说明 operator= 将一个集中的元素替换为另一个集的副本。...哈希函数将此序列分区到称为存储桶的有序序列集中。 每个存储桶中,比较函数将确定任一元素对是否具有等效顺序。 每个元素存储两个对象,包括一个排序键和一个值。...非成员辅助函数: 名称 说明 make_tuple 创建一个tuple对象,其类型根据各实参类型定义 tie 创建左值引用的tuple,或将 tuple 解包为独立对象 forward_as_tuple

3.2K30

探秘static——不需实例化就能用?

,静态中只能包含静态成员(被static修饰的字段、属性、方法),不能被实例化,不能被继承;非静态中可以包含静态成员。        ...(2)被调用为静态: public static class ClassA //ClassA(静态) { //当然静态中不能存在构造函数...(); //调用ClassA中的方法直接调用:名.成员 } }        说明:ClassA为静态其中的方法也Fun()为非静态方法,所以ClassB中调用时不实例化...当含有静态成员的非静态实例化出对象后,这些对象公用这些静态成员,通过名或对象名都能访问它们。         在网上看到两个有趣的小例子:         人是一个非静态。...所以,方法内部的静态变量,执行完静态变量值不消失,再次执行此对象的方法时,值仍存在,它不是堆和栈中分配的,是静态区非的, 这是与局部变量最大的区别。

1.1K40

深入理解JVM(二)——揭开HotSpot对象创建的奥秘

对象的创建过程 当虚拟机遇到一条含有new的指令时,会进行一系列对象创建的操作: 检查常量池中是否有即将要创建的这个对象所属的的符号引用; 若常量池中没有这个的符号引用,说明这个还没有被定义...为对象中的成员变量赋上初始值(默认初始化); 设置对象头中的信息; 调用对象构造函数进行初始化 此时,整个对象的创建过程就完成了。...对象的内存模型 一个对象从逻辑角度看,它由成员变量和成员函数构成,从物理角度来看,对象是存储堆中的一串二进制数,这串二进制数的组织结构如下。...此外,对象头中可能还包含类型指针。通过该指针能确定这个对象所属哪个。 此外,如果对象是一个数组,那么对象头中还要包含数组长度。 2....实例数据 实力数据部分就是成员变量的值,其中包含成员变量和本类的成员变量。 3. 对齐补充 用于确保对象的总长度为8字节的整数倍。 HotSpot要求对象的总长度必须是8字节的整数倍。

67980

《C++Primer》第七章

对于某些,合成的默认构造函数可能执行错误的操作:如果定义块中的内置类型或符合类型(比如数组和指针)的对象被默认初始化,则它们的值可能是未定义的。...编译器可能不能为某些合成默认的构造函数:如果类中包含一个其他类型的成员并且这个成员的类型没有默认构造函数,那么编译器无法初始化该成员。...拷贝:初始化变量;以值的方式传递或返回一个对象 赋值:使用了赋值运算符 销毁:当对象不再存在时执行的操作,比如一个局部对象会在创建它的块结束时销毁,当vector对象数组销毁时存储在其中对象也会被销毁...默认初始化的发生条件: 我们块作用域中不使用任何初始值定义一个非静态变量或者数组时 当一个本身含有类型的成员且使用合成的默认构造函数时 当类型的成员没有构造函数初始值列表中显式地初始化时 值初始化的发生条件...: 在数组初始化的过程如果我们提供的初始值数量少于数组的大小时 当我们不使用初始值定义一个局部静态变量时 当我们书写形如T()的表达式显式地请求值初始化时,其中T是类型名 聚合 聚合使得用户可以直接访问其成员

53620

java+内存分配及变量存储位置的区别

new产生的数据   ◆静态域:存放在对象中用static定义的静态成员   ◆常量池:存放常量   ◆非RAM存储:硬盘等永久存储空间 Java内存分配中的栈   函数中定义的一些基本类型的变量数据和对象的引用变量都在函数的栈内存中分配...Java内存分配中的堆   堆内存用来存放由new创建的对象数组中分配的内存,由Java虚拟机的自动垃圾回收器来管理。   ...而数组对象本身在堆中分配,即使程序 运行到使用 new 产生数组或者对象的语句所在的代码块之外,数组对象本身占据的内存不会被释放,数组对象没有引用变量指向它的时候,才变为垃圾,不能在被使用,但仍...day,month,year为成员变量,它们存储堆中(new BirthDate()里面)。当BirthDate构造方法执行完之后,d,m,y将从栈中消失。...除了包含代码中所定义的各种基本类型(如int、long等等)和对象型(如String及数组)的常量值(final)还包含一些以文本形式出现的符号引用,比如:   ◆和接口的全限定名;   ◆字段的名称和描述符

85910

Oracle Java对象

== 为提供构造函数 包含调用以从蓝图创建对象构造函数构造函数声明看起来像方法声明,只是它们使用的名称并且没有返回类型。...可以构造函数声明中使用访问修饰符来控制哪些其他可以调用构造函数。 ==注意:如果另一个不能调用MyClass构造函数,则不能直接创建MyClass对象。...要引用点字段x,构造函数必须使用this.x。 将this与构造函数一起使用 构造函数中,还可以使用this关键字调用同一中的另一个构造函数。这样做称为显式构造函数调用。...如果初始化需要一些逻辑(例如错误处理或用于填充复杂数组的for循环),简单的作业是不够的。实例变量可以构造函数中初始化,其中可以使用错误处理或其他逻辑。...该方法是final的,因为实例初始化期间调用非final方法可能会导致问题。 创建和使用对象概述 声明命名,并将体括大括号之间。名前面可以有修饰符。主体包含的字段、方法和构造函数

79500

C++基础知识复习

自定义的构造函数 拷贝构造函数 深浅拷贝。 调用时机——函数传参,不是引用方式。函数返回类型是,而且不是引用类型。对象数组的初始化列表中,使用对象。...对象可以直接访问静态成员函数的静态成员函数内部不能直接访问this指针和对象的数据成员。 只能访问的静态数据成员。...---- 继承方式的不同,影响外部通过子类访问父成员。 ---- 调用父构造函数子类的构造函数中 ,显式调用父构造函数。...---- 调用顺序: 静态数据成员构造函数——》父构造函数——》非静态数据成员构造函数——》自己的构造函数。 (的静态成员)静态对象只创建一次。(构造函数、析构函数只执行一次。)...---- frend class 这个都是友元,这里面的所有成员函数都可以访问另一个里面的私有成员。 就相当与把这个里面的所有成员函数都声明为另一个的友元函数

52010

Delphi类型和引用

顺便提一下,类型包括包含类型分量的构造类型不能作为文件类型的基类型。...三:类型的字段 类型中的字段也就是的数据部分,其声明方法同记录中字段的声明语法相似: 标识符:类型 其中字段的类型可以是各种数据类型,甚至是另一个类型。...注意:尤其是熟悉C++的程序员要注意,C++中,当您用一个类型声明一个对象时,将自动调 用构造函数(这也是C++中一般不需要显式调用构造函数的原因),而在object Pascal中,当您声 明了一个类型的变量...不过这时候不会再在堆中分配一块 区域,也不执行缺省初始化工作,更不返回一个新的对象实例,它只是执行构造中指定的动作。...它是由多个类型的值组成的,其中每个值都有一个索引号, 不过跟一般的数组不同的是,一般的数组是个构造类型,您可以把数组作为一个整体参与运算如赋值或 传递等,而对数组属性来说,只能访问其中的每一个元素。

2.4K30

C#学习笔记(四)

的实例和对象含义相同。 2. 对象之间的包含关系:一个包含另外一个。这类似于继承关系,但包含可以控制对被包含成员的访问,甚至使用被包含成员进行其他处理。 3....对象之间的集合关系:一个用作另一个的多个实例的容器。这类似于对象数组,但集合有其他功能,包括索引、排序和重新设置大小。 4. 值类型:在内存的一个地方存储它们自己和它们的内容 5....只有string和object简单类型是引用类型,但是数组也是隐式的引用类型。 8. 的修饰符 image.png 9. 接口和抽象的相似之处:     它们都包含可以由派生继承的成员。...另外,按照定义,接口成员是公共的(因为它们倾向于在外使用),但抽象成员可以是私有的(只要它们不是抽象的)、受保护的、内部的或受保护的内部成员其中受保护的内部成员只能在应用程序的代码或派生中访问)...此外,接口不能包含字段、构造函数、析构函数、静态成员常量。 image.png

41720

C++复习大全(各种知识点)

C++编译器必须为每一个多态至少创建一个虚函数表,它其实就是一个函数指针数组其中存放着这个所有的虚函数的地址及该类的类型信息,其中也包括那些继承但未改写的虚函数。...多态数组  对象数组中存放派生对象  Shape      a(Point(1,1)); Circle     b(Point(2,2),5); Rectangle  c(Point(3,3),...只有虚函数访问需要经过vfptr的间接寻址,增加了一层间接性,因此带来了一些额外的运行时开销  隐含成员  一个C++的复合类型对象,其可能的隐含成员包含:若干vfptr,默认构造函数,默认拷贝构造函数...该类的继承链中至少有一个基是多态该类至少有一个虚基该类包含了多态的成员对象,但是该类不一定是多态  显然,当创建一个对象的时候,其隐含的成员vfptr必须被初始化为指向正确的vtable,而且这个初始化工作只能在运行时完成...  用构造函数确保初始化  如果一个构造函数,那么编译器创建对象时就自动调用这个函数

1K20

夯实Java基础系列4:一文了解final关键字的特性、使用方法,以及实现原理

这个内容面试中也有可能会出现。 final使用 final变量 final变量有成员变量或者是本地变量(方法内的局部变量),成员中final经常和static一起使用,作为常量使用。...其中常量必须在声明时初始化,final成员常量可以构造函数初始化。...这样的话,就解决了数组在外部被修改的不安全性,但也产生了另一个问题,那就是这个数组要被外部使用的。...对于引用类型,写 final 域的重排序规则对编译器和处理器增加了如下约束: 构造函数内对一个 final 引用的对象成员域的写入,与随后构造函数外把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序...JMM 可以确保读线程 C 至少能看到写线程 A 构造函数中对 final 引用对象成员域的写入。即 C 至少能看到数组下标 0 的值为 1。

37000

一文了解 final 关键字的特性、使用方法以及实现原理

这个内容面试中也有可能会出现。 final使用 final变量 final变量有成员变量或者是本地变量(方法内的局部变量),成员中final经常和static一起使用,作为常量使用。...其中常量必须在声明时初始化,final成员常量可以构造函数初始化。...这样的话,就解决了数组在外部被修改的不安全性,但也产生了另一个问题,那就是这个数组要被外部使用的。...对于引用类型,写 final 域的重排序规则对编译器和处理器增加了如下约束: 构造函数内对一个 final 引用的对象成员域的写入,与随后构造函数外把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序...JMM 可以确保读线程 C 至少能看到写线程 A 构造函数中对 final 引用对象成员域的写入。即 C 至少能看到数组下标 0 的值为 1。

1.3K20
领券