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

C++笔试面试题整理

const修饰函数的返回值:如果给“指针传递”的函数返回值加const,则返回值不能被直接修改,且该返回值只能被赋值给const修饰的同类型指针。...精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。...(4)流操作符重载返回值申明为“引用”的作用: 流操作符>,这两个操作符常常希望被连续使用,例如:cout 操作符的返回值应该是一个仍然支持这两个操作符的流引用...这个操作符象流操作符一样,是可以连续使用的,例如:x = j = 10;或者(x=10)=100;赋值操作符的返回值必须是一个左值,以便可以被继续赋值。因此引用成了这个操作符的惟一返回值选择。...函数重载是一个同名函数完成不同的功能,编译系统在编译阶段通过函数参数个数、参数类型不同,函数的返回值来区分该调用哪一个函数,即实现的是静态的多态性。但是记住:不能仅仅通过函数返回值不同来实现函数重载。

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

    【C++】类和对象(第二篇)

    构造函数无返回值 要注意这里说的无返回值不是说返回类型是void,而是根本就不写返回类型。...那现在我们学了C++,有没有什么好的办法可以帮助我们解决这个问题呢? 可不可以像上面的构造函数自动初始化一样自动对对象中的资源进行清理呢?...~是啥,在C语言中是不是按位取反啊,表示它的功能和构造函数是相反的。 无返回值且无参数 和构造函数一样,析构函数也是没有返回值的,并且析构函数还没有参数。...概念 C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。...函数名字为:关键字operator后面接需要重载的运算符符号 函数原型:返回值类型 operator操作符(参数列表) 那我们接下来就来练习一下: 上面我们不是相比较两个日期类对象是否相等嘛,那我们就来重载一下

    12310

    C++赋值操作符重载

    1.赋值操作符重载的原因 赋值操作符是一个使用频率最高的操作之一,通常情况下它的意义十分明确,就是将两个同类型的变量的值从一端(右端)传到另一端(左端)。...赋值操作符重载的注意事项 赋值操作符只能通过类的成员函数的形式重载。这就说明了,如果要将用户自定义类型的值传递给基本数据类型的变量,只能通过类型转换机制,而不能利用重载来实现。...进行深拷贝时,一般对象a和b有相同的数据类型。如果在进行赋值时发生深拷贝,就一定要对赋值操作符进行重载,否则赋值运算符就会按赋值的常规语义进行(成员变量之间传递数据),而不发生深拷贝。考察如下例子。...(2)类的拷贝构造函数虽然与赋值操作符并不是一回事,但通常可以在拷贝构造函数中利用赋值操作符重载,以避免对两个对象之间传递数据的重复解释。...(5)最赋值操作符进行重载时,通常将操作符函数的返回值定义为赋值左操作数类型的引用。这是为了实现对赋值表达式的求值,还有一个目的就是为了实现链式操作。

    59420

    C++赋值操作符重载简介

    1.赋值操作符重载的原因 赋值操作符是一个使用频率最高的操作之一,通常情况下它的意义十分明确,就是将两个同类型的变量的值从一端(右端)传到另一端(左端)。...赋值操作符重载的注意事项 赋值操作符只能通过类的成员函数的形式重载。这就说明了,如果要将用户自定义类型的值传递给基本数据类型的变量,只能通过类型转换机制,而不能利用重载来实现。...进行深拷贝时,一般对象a和b有相同的数据类型。如果在进行赋值时发生深拷贝,就一定要对赋值操作符进行重载,否则赋值运算符就会按赋值的常规语义进行(成员变量之间传递数据),而不发生深拷贝。考察如下例子。...(2)类的拷贝构造函数虽然与赋值操作符并不是一回事,但通常可以在拷贝构造函数中利用赋值操作符重载,以避免对两个对象之间传递数据的重复解释。...(5)最赋值操作符进行重载时,通常将操作符函数的返回值定义为赋值左操作数类型的引用。这是为了实现对赋值表达式的求值,还有一个目的就是为了实现链式操作。

    76310

    【C++初阶】一文讲通默认成员函数~类和对象(中)

    构造函数的本质是要替代我们以前在数据结构初阶中写的Init()函数的功能,而且构造函数自动调用的特点就更好地替代了它。 构造函数的特点: 函数名与类名相同。 无返回值。...,通过同类型的对象初始化构造,而不是指针 Date d3(d1); d3.Print(); //也可以这样写,这里也是拷贝构造,C++支持这样的写法 Date d4 = d1; d4.Print...如果一个重载运算符函数是成员函数,则它的第一个运算对象默认传给隐式的this指针,因此运算符重载作为成员函数时,参数比运算对象少一个。...有返回值,且建议写成当前类类型引用,引用返回可以提高效率,有返回值目的是为了支持连续赋值场景。...,而 get 的三个成员函数都没有被 const 修饰,那么当d调用成员函数get_year()时,会传值给Date*const this,也就是发生了权限的放大(this指针可以修改成员变量,而d不可以

    12910

    【C++】类的六大默认成员函数及其特性(万字详解)

    注意:析构函数不能重载 如下析构函数,因为析构函数的特性的第一点规定了析构函数的函数名只能是~+类名,而第二点规定的无参数无返回值,则限制了析构函数不能够像构造函数那样重载,即一个类只能有一个析构函数...函数原型:返回值类型 operator操作符(参数列表) 注意: 不能通过连接其他符号来创建新的操作符:比如operator@ 重载操作符必须有一个类类型参数 用于内置类型的运算符,其含义不能改变,...然后对于引用返回值的设计,主要是考虑到赋值操作符要兼容连等的操作,如: d3 = d2 = d1; 这时如果函数返回值为void,则d3后的'='运算符就没有右运算数了,为了兼容这种情况,我们可以将函数的返回值设置为调用函数的变量...赋值运算符重载函数特性思维导图: 取地址操作符重载 对于内置类型变量而言,取地址操作符可以获取到它们的地址,而对于自定义类型变量而言,取地址操作符的作用同样是获取到它们的地址,而自定义变量的地址...const取地址操作符重载 const取地址操作符重载是取地址操作符的一种重载形式,但它的作用主要是为被const修饰的变量获取它的const修饰的地址,因为要出入保持一致,否则如果传入一个

    19010

    c++面试选择题_C语言经典笔试题

    声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。不能建立数组的引用。...(4)流操作符重载返回值申明为“引用”的作用: 流操作符>,这两个操作符常常希望被连续使用,例如:cout 操作符的返回值应该是一个仍然支持这两个操作符的流引用...赋值操作符=,这个操作符象流操作符一样,是可以连续使用的,例如:x = j = 10;或者(x=10)=100;赋值操作符的返回值必须是一个左值,以便可以被继续赋值。...因此引用成了这个操作符的惟一返回值选择。...sizeof(p),p为指针得到的是一个指针变量的字节数,而不是p 所指的内存容量。C++/C 语言没有办法知道指针所指的内存容量,除非在申请内存时记住它。

    1.1K10

    C++经典面试题(最全,面中率最高)

    声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。不能建立数组的引用。...(4)流操作符重载返回值申明为“引用”的作用: 流操作符>,这两个操作符常常希望被连续使用,例如:cout 操作符的返回值应该是一个仍然支持这两个操作符的流引用...这个操作符象流操作符一样,是可以连续使用的,例如:x = j = 10;或者(x=10)=100;赋值操作符的返回值必须是一个左值,以便可以被继续赋值。因此引用成了这个操作符的惟一返回值选择。...对于联合的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于结构的不同成员赋值是互不影响的。...sizeof(p),p 为指针得到的是一个指针变量的字节数,而不是p 所指的内存容量。C++/C 语言没有办法知道指针所指的内存容量,除非在申请内存时记住它。

    2.1K30

    C++:类与对象(2)

    无返回值。 特性3. 对象实例化时编译器自动调用对应的构造函数。(由编译器完成) 特性4. 构造函数可以重载。...你在系统上看到的就是200元而不是你原来的100万!)...5.1 运算符重载 C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其 返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。...函数原型:返回值类型 operator操作符(参数列表) 注意事项: 1、不能通过连接其他符号来创建新的操作符:比如operator@ 2、重载操作符必须有一个类类型参数 3、用于内置类型的运算符...注意:内置类型成员变量是直接赋值的,而自定义类型成员变量需要调用对应类的赋值运算符重载完成赋值。 思考: 1、既然编译器生成的默认赋值运算符重载函数已经可以完成字节序的值拷贝了,还需要自己实现吗?

    13410

    【C++】揭秘类与对象的内在机制(核心卷之运算符重载、赋值重载与取址重载的奥秘)

    ⼀样,具有返回类型和参数列表以及函数体,返回值需要程序员自己根据逻辑确定     3....    那么接下来我们知道了上面的知识,就可以真正来实现一个日期类的运算符重载了,这里我们选择日期类的相等运算符重载(不是赋值),我们来分析分析它的返回值和参数     首先返回值肯定是bool...,如果写了就要写我们的赋值重载完成深拷贝,否则就不需要,例如Stack类需要自己写,而Date类不需要     技巧二就是:看有没有内置类型的成员变量指向堆上面的空间,不用看自定义类型,因为自定义类型有它自己的赋值重载...,只需要看看有没有内置类型的成员变量指向堆上面的空间,如果有,那么我们就需要自己写赋值重载以完成深拷贝,否则就不需要,例如Stack类需要自己写,而Date类不需要     接下来我们就分别用Date...需要注意的是,stack类有返回值,千万不要忘记了这一点,并且建议写成当前类类型的引⽤,引⽤返回可以不生成临时变量,从而提⾼效率,有返回值⽬的是为了⽀持连续赋值场景     3.

    7410

    运算符重载----学校版本

    ,所以这个返回值的类型我们确定是complex类型的; 2.重载为成员函数 (1)上面介绍的是复数的加法的普通的函数,我们可以把这个函数写成成员函数的,就是让这个函数在类里面进行声明,然后在类的外面进行定义...,因为我们在调用成员函数的时候,例如ab这两个复数的减法,我们调用的时候是a.operator-(b)这样的方式进行调用的,写的话我们就写作a-b就可以了; (3)总结来讲:重载为成员函数时候,参数的个数是运算符的目数减去...1,重载为普通函数的时候,这个参数的个数就是我们的操作符的目数(目数就可以简单的理解为这个操作数的个数);  3.重载为友元函数 (1)大部分情况下,这个运算符重载为成员函数就是最好的选择; (2)但是在一些情况下面...,我们使用这个成员函数是没有办法满足需求的,但是使用这个普通的函数有没有办法去访问这个私有的成员变量,这个时候我们就应该设置为这个友元类的函数; (3)什么情况下是没有办法满足需求呢?...我们来看一下,就是我们想要实现一个数字和复数的加法运算,这个时候,成员函数就没有办法满足我们的需求了; (4)普通函数呢,普通的函数我们没有办法去调用这个成员变量real和image,所以这个普通的函数也是行不通的

    6500

    c++面试题

    声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。不能建立数组的引用。...(4)流操作符重载返回值申明为“引用”的作用: 流操作符>,这两个操作符常常希望被连续使用,例如:cout 操作符的返回值应该是一个仍然支持这两个操作符的流引用...赋值操作符=。这个操作符象流操作符一样,是可以连续使用的,例如:x = j = 10;或者(x=10)=100;赋值操作符的返回值必须是一个左值,以便可以被继续赋值。...因此引用成了这个操作符的惟一返回值选择。...此外,就是上面提到的对函数传ref和pointer的区别。 15.什么时候需要“引用”? 流操作符>、赋值操作符=的返回值、拷贝构造函数的参数、赋值操作符=的参数、其它情况都推荐使用引用。

    1.2K21

    初识C++ · 类和对象(中)(2)

    1 赋值运算符重载 1.1运算符重载 在学习赋值运算符重载之前,我们先来介绍一下运算符重载: C++为了增加代码的可读性,引用了运算符重载的概念,运算符重载其实就是一个特殊一点点的函数,返回值,参数,...其中,返回值,返回类型等都是根据实际情况操作的,比如日期减日期,返回类型是int,因为返回值是相差的天数,比如日期减天数,返回值就是日期类,因为返回值就是日期,所以实际的返回值返回类型参数等都是看实际情况的...当重载函数作为成员函数的时候,因为成员函数都有个默认的成员函数指针,所以形参看起来比操作数少一个。 sizeof ?: . ::这几个操作符好说,不能重载,不常见的是....这里的规定是先执行j =m,返回的是j,再执行i = j,最后赋值完成,也就是说连续赋值需要表达式有一个返回值,比如j = m的返回值就是j,那么执行重载后的连续赋值,就需要函数要有返回值: 那么j =...//+ -实现 Date operator+(int day); Date operator-(int day); 这里可以注意到的是这两个函数返回值是值,而不是引用,上面的函数就是引用,因为生命周期

    9510

    读完某C++神作,我只记下了100句话

    对于list对象应该优先使用list容器特有的成员版本【能添加删除元素】,而不是泛型算法。 简单说,类就是定义了一个新的类型和一个新的作用域。成员访问级别默认私有。...初始化const或引用类型或没有默认构造函数的类类型数据成员的唯一机会是构造函数的初始化列表【冒号开始,逗号分隔】。初始化顺序由定义顺序决定,而不是初始化列表顺序。...声明而不定义成员函数是合法的,但是使用将导致链接失败。将复制构造函数声明为private可防止复制。定义了复制构造函数,也必须定义默认构造函数。 重载赋值操作符=,隐含的第一个参数this。...使用算法sort等时会假定一些操作符(重载操作符。重载操作符如果是成员函数,左操作数必须是该类的对象【一定是this】。 用函数或类操作某个类的数据可设置其为友元。...对象不支持动态绑定,指针和引用支持但使用起来麻烦,解决方法是定义包装类或句柄类【提供到其它类接口的类】。像使用指针一样使用句柄而不用管理它指向的对象。类似智能指针的方法建立指针句柄。

    1.4K20

    精选 30 个 C++ 面试题(含解析)

    (4)流操作符重载返回值申明为“引用”的作用: 流操作符>,这两个操作符常常希望被连续使用,例如:cout 操作符的返回值应该是一个仍然支持这两个操作符的流引用...这个操作符象流操作符一样,是可以连续使用的,例如:x = j = 10;或者(x=10)=100;赋值操作符的返回值必须是一个左值,以便可以被继续赋值。因此引用成了这个操作符的惟一返回值选择。...根据前面提到的引用作为返回值的三个规则,第2、3两个方案都被否决了。静态对象的引用又因为((a+b) == (c+d))会永远为true而导致错误。所以可选的只剩下返回一个对象了。...sizeof(p),p 为指针得到的是一个指针变量的字节数,而不是p 所指的内存容量。C++/C 语言没有办法知道指针所指的内存容量,除非在申请内存时记住它。...,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。

    2.2K30

    C++从入门到精通——类的6个默认成员函数之赋值运算符重载

    class Date {}; 一、运算符重载 定义 C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似...函数原型:返回值类型 operator操作符(参数列表) 注意: 不能通过连接其他符号来创建新的操作符:比如operator@ 重载操作符必须有一个类类型参数 用于内置类型的运算符,其含义不能改变...二、赋值运算符重载 赋值运算符重载格式 参数类型:const T&,传递引用可以提高传参效率 返回值类型:T&,返回引用可以提高返回的效率,有返回值目的是为了支持连续赋值 检测是否自己给自己赋值...用户没有显式实现时,编译器会生成一个默认赋值运算符重载,以值的方式逐字节拷贝。 注意: 内置类型成员变量是直接赋值的,而自定义类型成员变量需要调用对应类的赋值运算符重载完成赋值。...友元函数的使用应该谨慎,因为它破坏了封装性原则,导致代码可读性和可维护性降低。在设计类的时候,应该尽量避免使用友元函数,而是通过成员函数来操作类的私有成员和保护成员。

    13710

    C++重载操作符

    什么叫重载操作符?这要先说什么是操作符,其实最简单的:+、-、*、/、操作符,这些也是很常见的重载操作符。 那什么叫重载操作符?.../ 注意返回值是Time类型,因为相加也是返回一个结果Time } 这样就写好方法了,这个方法是放在Time类方法里的,调用如下: Time time1 = ......+(int h) { // 这里你可以看做是增加一小时的方法 // 注意返回值是Time类型,因为相加也是返回一个结果Time } // 使用: Time time3 = time1 + 1;...但是我们可以用友元函数来解决这个问题,关于友元函数是什么这里只简单介绍一下: 类的友元函数是非成员函数,因此不能用成员操作符来调用,在定义时也不需要使用::限定符,但它与成员函数的访问权限相同,也就是可以访问类的成员...是cout成员变量来输出,但是我们重载一下就可以了,同样的,因为操作符的左边是cout而不是我们的类型对象,所以也要通过友元函数的方式来定义才能使用

    32720

    框架设计原则和规范(四)

    a) 不要让属性返回快照集合,属性应该返回实况集合 b) 要用快照集合或实况的IEnumerable(或其子类)来表示不稳定的集合 8) 数组与集合之间的选择 A.优先使用集合,而不是优先使用数组...表示那些可以为""null“的值类型 1) 考虑用来表示那些可能不存在的值(比如可选的值) 2) 除非在类似的情况下,你会因为,引用类型可以为null,而考虑用引用类型来代替它,不要使用Nullable...Uri 1) 用System.Uri来表示URI和URL数据 2) 考虑为最常用的带System.Uri参数的成员提供基于字符串的重载成员 3) 不要不加思索的为所有基于System.Uri的成员提供基于字符串的重载成员...相等性操作符 1) 不要只重载相等性操作符中的一个 2) 要确保Object.Equals与相等性操作符具有完全相同的语义及相近的性能 3) 避免抛出异常 4) 值类型的相等性操作符 A.要重载值类型的相等性操作符...——如果相等性是有意义的 5) 引用类型的相等性操作符 A.避免重载可变引用类型的相等性操作符 B.

    1.5K40

    C++初阶 类和对象(下)

    为什么这个形参得是被类对象的引用呢,我直接传递我这个要拷贝的目标不可以吗,不是一样的操作吗。...比方说,我们现在实现的日期类的拷贝构造函数,其实只是涉及到了一个简单的值拷贝,而到后期我们使用什么栈啊,堆啊,二叉树之类的东西,我们如果还是简单地进行值拷贝,我们拷贝的东西不就只有一具空壳吗,我们得采取一些方式实现深拷贝...注意: 1.不能通过连接其他符号来创建新的操作符:比如operator@ 2.重载操作符必须有一个类类型参数 3.用于内置类型的运算符,其含义不能改变,例如:内置的整型+,不 能改变其含义 4...实现这个之前我们可以写一个GetMonthDay函数来获得没一月份的天数,值得注意的一点是闰年时2月为29日,接着我们来讲讲实现思路,我们的返回值最好设置成Date&型的,因为+=操作的目标出了函数作用域在...main中依然存在,因此使用Date&类型的返回值可以令编译器的效率得到提高。

    16310
    领券