![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
直击招聘C++
文章平均质量分 74
AI Chen
悟已往之不谏,知来者之可追。实迷途其未远,觉今是而昨非。
展开
-
【直击招聘C++】4.3运算符重载概述
运算符重载就是用同一个运算符完成不同的运算功能,和函数重载一样,运算符重载也是在编译阶段完成的,体现出静态的多态性。当运算符重载为类成员函数时,主要由三种形式,即重载为类的成员函数、重载为类的友元函数和普通函数,这里主要讨论前两种。一般来讲,单目运算符最好重载为成员函数(格式1),双目运算符最好重载为友元函数(格式2)。其中,定义运算符+和-的重载运算符时,前者采用格式1设计,后者采用格式2设计,从中可以看到,在同样的情况下采用格式2时要比格式1多一个形参。由于返回的式引用,执行t2 = t1;原创 2023-02-15 09:28:08 · 198 阅读 · 1 评论 -
【直击招聘C++】5.1函数模板
template < 类型形参表 > 返回类型 函数名(形参表) {函数体;例如以下代码定义了一个绝对值的函数模板return x;原创 2023-02-14 12:26:18 · 163 阅读 · 0 评论 -
【直击招聘C++】4.2友元类
和将一个函数设计为一个类的友元函数,可以将一个类声明为另一个类的友元类。若B类为A类的友元类,则B类的所有成员函数都是A类的友元函数。上述程序中将类B声明为类A的友元类,因此类B的成员函数可以通过类A对象访问起私有数据成员。原创 2023-02-14 11:17:43 · 128 阅读 · 0 评论 -
【直击招聘C++】3.2C++中的explicit
【答】在调用普通函数test02时候执行s=42,调用函数Show(s),参数传递为const Number& n=s,那么调用那个构造函数创建n对象呢?由于Number(short)是explicit构造函数,不能调用它,只能调用Number(int)构造函数(s由short转化为int类型),所以输出int。实际上C++的构造函数默认是隐式的,该语句相当于A a(1),所以程序正确执行病输出n=1。explicit的作用式表明该构造函数式显式的,不是隐式的,从而阻止构造函数进行隐式转换。原创 2023-02-13 11:00:09 · 116 阅读 · 0 评论 -
【直击招聘C++】3.1常对象和常对象成员
对于用户自定义的类类型,在性能上存在很大的差异,因为子对象在进入构造函数体后已经构造完成,也就是说在成员初始化列表处进行构造对象的工作,这是调用对象的构造函数,在进入函数体之后进行的是对已经构造好的对象进行赋值,需要赋值运算符才能完成(如果未提供,编译器会提供一个默认的赋值运算符函数按成员进行赋值),而函数调用是浪费资源的,所以在这种情况下采用成员初始化列表来初始化数据成员性能更优。最后到函数体中给b赋值为k。无论是在构造函数成员初始化列表中初始化数据成员,还是在构造函数体中对他们赋值,最终结果是相同的。原创 2023-02-12 11:17:46 · 383 阅读 · 0 评论 -
【直击招聘C++】2.6 对象之间的复制
由Student类的拷贝构造函数可以看到s到t的复制是浅复制,如下图所示,因为这两个对象的pname数据成员均指向相同的内存空间。当两个对象之间进行复制时,若复制完成后她们不会共享任何资源(内存空间),其中一个对象的销毁不会影响到另一个对象,这种对象之间的复制称为深复制。当两个对象之间进行复制时,若复制完成后她们还共享某些资源(内存空间),其中一个对象的销毁会影响另一个对象,这种对象之间的复制称为浅复制。同一个类的对象之间可以进行复制操作,即将一个对象数据成员复制给另一个对象的相应的数据成员。原创 2023-02-11 19:39:37 · 451 阅读 · 0 评论 -
【直击招聘C++】2.5 this指针
this指针是隐含于每一个类对象的特殊指针,该指针值是一个正在被某个成员函数操作的对象的地址。this指针是C++实现封装的一种机制,它将对象和该对象调用的成员函数连接在一起,在外部看来每个对象都拥有自己的成员函数,所以this指针在成员函数开始执行钱构造,在成员函数执行结束后清除。只有获得一个对象后才能通过对象使用this指针,而且this指针只有在成员函数中才有定义。int n;Test s1;} };Test s(10);原创 2023-02-11 12:49:57 · 571 阅读 · 0 评论 -
【直击招聘C++】2.4 对象数组
对象数组是指所有数组元素为同一个类对象的数组,也就是说若某一个类有若干对象,可以把这一系列被创建的对象用一个数组来存放。对象数组和普通数组类似,如果在定义对象数组时不初始化,则每个元素调用默认构造函数来创建;当使用new动态创建对象数组p(含n个对象)时创建过程将调用n次构造函数,调用构造函数的次序依次为:p[0]、p[1]…对象数组进行实例化时,只能调用默认构造函数,不能调用带有参数的默认构造函数。由于创建对象数组时每个数组元素都要调用相匹配的构造函数来创建,所以必须设计好相应的构造函数。原创 2023-02-06 10:30:26 · 306 阅读 · 0 评论 -
【直击招聘C++】2.3 对象指针
以上各个类创建时调用构造函数的顺序是:类C的全局对象c、pa指向的类A对象、类B的对象b和静态对象d。接着释放静态对象d,调用D的析构函数,最后释放全局对象c,调用C的析构函数。若不使用delete运算符销毁,在程序结束时该对象仍然存在,并占用相应的存储空间,即系统不能自动销毁动态创建的对象实例。【答】定义c1对象调用一次构造函数,为对象指针c3使用new运算符动态分配内存空间时调用一次构造函数,而定义c1的引用c4时并不会调用构造函数。【答】a,b各调用构造函数一次,定义对象数组c时调用构造函数3次。原创 2023-02-04 20:17:37 · 258 阅读 · 0 评论 -
【直击招聘C++】2.2 静态成员和静态对象
静态数据成员是类中所有对象共享的成员,而不是某个对象的成员,也就是说静态数据成员的存储空间不是放在每个对象中,而是和成员函数一样放在类公共区中,所以有时将静态成员称为类变量。对静态数据成员的操作和一般数据成员一样,定义为私有的静态数据成员不能由外界访问。静态成员函数只能直接访问【静态数据成员】,不能直接访问类中的非静态数据成员,因为非静态数据成员只有对象存在时才有意义,可以通过类对象来访问类的成员。静态成员包括静态数据成员和静态成员函数,提出静态成员的目的是为了解决数据共享问题。原创 2023-01-28 11:36:28 · 475 阅读 · 0 评论 -
【直击招聘C++】2.1 类
类是一种用户自定义的数据类型,用于组织数据和数据操作。类是面向对象程序设计的基础。//类声明 class 类名 {private :私有数据成员和成员函数;protected : 保护数据成员和成员函数;public :公有数据成员和成员函数;//必须以;结尾 //类实现 静态数据成员初始化;各个成员函数的定义;前面的class{……}称为类声明,类声明告诉编译器有一个指定名称的类,它具有那些数据成员、那些成员函数,并没有为数据成员和数据函数分配内存空间。原创 2023-01-27 00:38:14 · 634 阅读 · 0 评论 -
【直击招聘C++】1.4 内存管理
p是自动变量,存放在【栈空间】中,在函数返回后p变量本身被释放,但它指向的对象仍然存在,由q指向它,执行q->disp()时输出2,最后通过delete p释放执行对象的空间。如果用delete释放malloc申请的动态内存,尽管不会导致程序出错,但是这样程序可读性差,所以new/delete,malloc/free必须配对使用。delete运算符释放new分配到的堆内存。【答】malloc和free是C/C++中的标准库函数,new/delete是C++的运算符,他们都用于申请动态内存和释放内存。原创 2023-01-18 23:30:53 · 264 阅读 · 0 评论 -
【直击招聘C++】1.6 断言assert
assert用于测试表达式的值,如果表达式的值为假,则assert输出错误信息,并调用函数abort()以结束程序的执行。这是测试某个变量是否具有正确的值的有用的调试工具。当程序中遇到这个语句时,如果x的值大于或等于10,则将打印包含行号和文件名的错误信息,而且程序终止。然后程序将在这个代码区域内查找错误。执行时若输入30,则出现断言x原创 2023-01-18 22:15:44 · 135 阅读 · 0 评论