1.、为何构造函数不能声明为虚函数?
剖析:因为虚函数采纳的是虚挪用的要领,虚挪用是指许可在只晓得部份信息的情况下
的事情机制,迥殊许可我们挪用一个只晓得接口而不晓得其对象的准确范例的函数。
然则假如我们要挪用构造函数竖立对象时,必须要晓得对象的准确范例,
因而构造函数不能为虚函数。
2.C++中哪些函数不能被声明为虚函数?
剖析:一般函数(非成员函数),构造函数,内联成员函数、静态成员函数、友元函数。
(1)虚函数用于基类和派生类,一般函数所以不能
(2)构造函数不能是因为虚函数采纳的是虚挪用的要领,
(3)内联成员函数的本质是在挪用的处所直接将代码扩睁开
(4)继承时,静态成员函数不能被继承的,它只属于一个类,因为也不存在动态联编
(5)友元函数不是类的成员函数,因而也不能被继承
3.类的静态成员和非静态成员有何辨别?
答:类的静态成员每一个类只需一个,静态成员为一切类的实例对象同享,静态成员有静态成员变量和静态成员函数,静态成员变量运用前必需初始化,静态成员变量可以被静态成员函数和非静态成员函数接见,而静态成员函数只能接见静态成员变量,因为静态成员函数属于类,其没有this指针。非静态成员每一个对象都有一个。
4 重载(overload)和重写(overried,有的书也叫做“掩盖”)的辨别?
重载:是指许可存在多个同名函数,而这些函数的参数表差异(或许参数个数差异,或许参数范例差异,或许两者都差异)。 重写:是指子类从新定义复类虚函数的要领。 从完成道理上来讲:重载:编译器依据函数差异的参数表,对同名函数的称号做润饰,然后这些同名函数就成了差异的函数(最少关于编译器来讲是如许的)。如,有两个同名函数:function func(p:integer):integer;和function func(p:string):integer;。那末编译器做过润饰后的函数称号多是如许的:int_func、str_func.关于这两个函数的挪用,在编译器间就已肯定了,是静态的。也就是说,它们的地点在编译期就绑定了(早绑定),因而,重载和多态无关! 重写:和多态真正相干。当子类从新定义了父类的虚函数后,父类指针依据赋给它的差异的子类指针,动态的挪用属于子类的该函数,如许的函数挪用在编译时期是没法肯定的(挪用的子类的虚函数的地点没法给出)。因而,如许的函数地点是在运行期绑定的(晚绑定)
5 简述成员函数、全局函数和友元函数的差异。
成员函数只能由该类所实例化的对象来举行挪用。[静态成员除外]
全局函数可以在恣意位置举行挪用。
友元函数可以让本类和友元类对象挪用。
用new分派的内存用delete删除用new[]分派的内存用delete[]删除delete[]会挪用数组元素的析构函数。内部数据范例没有析构函数,所以题目不大。假如你在用delete时没用括号,delete就会以为指向的是单个对象,不然,它就会以为指向的是一个数组。
6.继承的优缺点。
类继承是在编译时刻静态定义的,且可直接运用,类继承可以较轻易地转变父类的完成。然则类继承也有一些不足之处。起首,因为继承在编译时刻就定义了,所以没法在运行时刻转变从父类继承的完成。更糟的是,父类一般最少定义了子类的部份行动,父类的任何转变都可以影响子类的行动。假如继承下来的完成不合适处置惩罚新的题目,则父类必需重写或被其他更合适的类替代。这类依托关联限定了灵活性并终究限定了复用性。 (待补充)
7.C++有哪些性子(面向对象特性)
封装,继承和多态。
在面向对象顺序设想言语中,封装是应用可重用身分构造软件体系的特性,它不仅支撑体系的可重用性,而且另有利于进步体系的可扩大性;音讯通报可以完成发送一个通用的音讯而挪用差异的要领;封装是完成信息隐蔽的一种手艺,其目的是使类的定义和完身星散。
8. 在什么时刻须要运用“常援用”?
假如既要应用援用进步顺序的效力,又要庇护通报给函数的数据不在函数中被转变,就 应运用常援用。常援用声明体式格局:const 范例标识符 &援用名=目的变量名;
int a
const int &ra=a;
ra=1; //毛病
a=1; //准确
例2 string foo( );
void bar(string & s);
那末下面的表达式将是不法的:
bar(foo( ));
bar("hello world");
缘由在于foo( )和"hello world"串都邑发作一个暂时对象,而在C++中,这些暂时对象都是const范例的。因而上面的表达式就是试图将一个const范例的对象转换为非const范例,这是不法的。援用型参数应该在能被定义为const的情况下,只管定义为const
9.ASSERT()是干什么用的
答:ASSERT()是一个调试顺序时常常运用的宏,在顺序运行时它盘算括号内的表达式,假如表达式为FALSE (0),
顺序将报告毛病,并停止执行。假如表达式不为0,则继承执行背面的语句。这个宏一般本来推断顺序中是不是涌现了显著不法的数据,假如涌现了停止顺序以防止致使严重后果,同时也便于查找毛病。比方,变量n在顺序中不该该为0,假如为0可以致使毛病,
10. 完成多态的要领?
剖析: ① 一个基类的援用可以指向它的派生类实例
② 一个基类的指针可以指向它的派生类实例
11. 面向对象的三个基础特性,并简朴叙说之?
① 封装:将客观事物笼统成类,每一个类对自身的数据和要领执行接见控制(private, protected,public)
② 继承:广义的继承有三种完成情势:
完成继承(指运用基类的属性和要领而无需分外编码的才)
可视继承(子窗体运用父窗体的表面和完成代码)
接口继承(仅运用属性和要领,完成滞后到子类完成)。
前两种(类继承)和后一种(对象组合=>接口继承以及纯虚函数)构成了功用复用的两种体式格局。
③ 多态:是将父对象设置成为和一个或更多的他的子对象相称的手艺,赋值以后,父对象就可以依据当前赋值给它的子对象的特性以差异的体式格局运作。简朴的说,就是一句话:许可将子类范例的指针赋值给父类范例的指针。
补充题目: 多态的作用?
主如果两个:
1. 隐蔽完成细节,使得代码可以模块化;扩大代码模块,完成代码重用;
2. 接口重用:为了类在继承和派生的时刻,保证运用家属中任一类的实例的某一属性时的准确挪用。
12重载(overload)和重写(overried,有的书也叫做“掩盖”)的辨别?
① 重载:是指许可存在多个同名函数,而这些函数的参数表差异(或许参数个数差异,或许参数范例差异,或许两者都差异)。
② 重写:是指子类从新定义父类虚函数的要领。
从完成道理上来讲:
① 重载:编译器依据函数差异的参数表,对同名函数的称号做润饰,然后这些同名函数就成了差异的函数(最少关于编译器来讲是如许的)。关于这类函数的挪用,在编译时期就已肯定了,是静态的。也就是说,它们的地点在编译期就绑定了(早绑定),因而,重载和多态无关!
② 重写:和多态真正相干。当子类从新定义了父类的虚函数后,父类指针依据赋给它的差异的子类指针,动态的挪用属于子类的该函数,如许的函数挪用在编译时期是没法肯定的(挪用的子类的虚函数的地点没法给出)。因而,如许的函数地点是在运行期绑定的(晚绑定)
13多态的作用?
主如果两个:
① 隐蔽完成细节,使得代码可以模块化;扩大代码模块,完成代码重用;
② 接口重用:为了类在继承和派生的时刻,保证运用家属中任一类的实例的某一属性时的准确挪用。
14、C++中的空类,默许发作的类成员函数:
class { public: Empty(); // 缺省构造函数 Empty(const Empty&); // 拷贝构造函数 ~Empty(); // 析构函数 Empty& operator=(const Empty&); // 赋值运算符 Empty* operator&(); // 取值运算符 const Empty* operator&() const; // 取值运算符const };
15.历程间通讯的体式格局有?
历程间通讯的体式格局有 :同享内存, 管道(著名管道/无名管道),Socket ,音讯行列 ,信号,信号量,内存映照等。
16死锁的四个必要条件?
互斥,请求坚持,不可褫夺,环路。
17、类的静态成员和非静态成员有什么辨别?
类的静态成员每一个类只需一个,等于属于本类的;类的非静态成员每一个对象都有一份。
18什么是浅拷贝?什么是深拷贝?
浅拷贝是指源对象与拷贝对象共用一份实体,仅仅是援用的变量差异(称号差异)。对个中任何一个对象的修改都邑影响别的一个对象。
深拷贝是指源对象与拷贝对象相互自力,个中任何一个对象的修改都不会对别的一个对象形成影响。
一般来讲,浅拷贝就是复制谁人对象的指针。深拷贝就是复制了谁人对象。
19、Windows编程线程同步的几种体式格局?(重要)
原子锁、临界区(段)、事宜、互斥(体)、信号量、可期待定时器
20什么是“援用”?申明和运用“援用”要注重哪些题目?
答:援用就是某个目的变量的“别号”(alias),对援用的操纵与对变量直接操纵效果完全雷同。申明一个援用的时刻,牢记要对其举行初始化。援用声明终了后,相当于目的变量名有两个称号,即该目的原称号和援用名,不能再把该援用名作为其他变量名的别号。声明一个援用,不是新定义了一个变量,它只示意该援用名是目的变量名的一个别号,它自身不是一种数据范例,因而援用自身不占存储单元,体系也不给援用分派存储单元。不能竖立数组的援用。
21. “援用”与指针的辨别是什么?
指针经由历程某个指针变量指向一个对象后,对它所指向的变量间接操纵。顺序中运用指针,顺序的可读性差;而援用自身就是目的变量的别号,对援用的操纵就是对目的变量的操纵。另外,就是上面提到的对函数传ref和pointer的辨别。
22. 关联、聚合(Aggregation)以及组合(Composition)的辨别?
涉及到UML中的一些观点:关联是示意两个类的一般性联络,比方“门生”和“先生”就是一种关联关联;聚合示意has-a的关联,是一种相对松懈的关联,聚合类不须要对被聚合类担任,如下图所示,用空的菱形示意聚合关联:
从完成的角度讲,聚合可以示意为:
class A {...} class B { A* a; .....}
而组合示意contains-a的关联,关联性强于聚合:组合类与被组合类有雷同的生命周期,组合类要对被组合类担任,采纳实心的菱形示意组合关联:
完成的情势是:
class A{...} class B{ A a; ...}
23.面向对象的三个基础特性,并简朴叙说之?
1. 封装:将客观事物笼统成类,每一个类对自身的数据和要领执行protection(private, protected,public)
2. 继承:广义的继承有三种完成情势:完成继承(指运用基类的属性和要领而无需分外编码的才)、可视继承(子窗体运用父窗体的表面和完成代码)、接口继承(仅运用属性和要领,完成滞后到子类完成)。前两种(类继承)和后一种(对象组合=>接口继承以及纯虚函数)构成了功用复用的两种体式格局。
3. 多态:是将父对象设置成为和一个或更多的他的子对象相称的手艺,赋值以后,父对象就可以依据当前赋值给它的子对象的特性以差异的体式格局运作。简朴的说,就是一句话:许可将子类范例的指针赋值给父类范例的指针。
24 多态的作用?
主如果两个:1. 隐蔽完成细节,使得代码可以模块化;扩大代码模块,完成代码重用;2. 接口重用:为了类在继承和派生的时刻,保证运用家属中任一类的实例的某一属性时的准确挪用。
25 在C++ 顺序中挪用被 C编译器编译后的函数,为何要加 extern “C”声明?
//extern是C/C++言语中表明函数和全局变量作用局限的关键字,该关键字通知编译器,其声明的函数和变量可以在本模块或别的模块中运用
// extern “C是衔接申明,编译时通知编译器以下代码用C作风的体式格局编译和衔接,其目的是完成C++与C及别的言语的夹杂编程。
26.“援用”与指针的辨别是什么?
指针经由历程某个指针变量指向一个对象后,对它所指向的变量间接操纵。顺序中运用指针,顺序的可读性差;而援用自身就是目的变量的别号,对援用的操纵就是对目的变量的操纵。另外,就是上面提到的对函数传ref和pointer的辨别。
23.New delete 与malloc free 的联络与辨别?
答案:都是在堆(heap)上举行动态的内存操纵。用malloc函数须要指定内存分派的字节数而且不能初始化对象,new 会自动挪用对象的构造函数。delete 会挪用对象的destructor,而free 不会挪用对象的destructor.
24 成员函数被重载的特性:
(1)雷同的局限(在同一个类中);
(2)函数名字雷同;
(3)参数差异;
(4)virtual 关键字无足轻重。
25掩盖是指派生类函数掩盖基类函数,特性是:
(1)差异的局限(离别位于派生类与基类);
(2)函数名字雷同;
(3)参数雷同;
(4)基类函数必需有virtual 关键字。
26假如用VC开辟顺序,罕见这么几个毛病,C2001,c2005,c2011,这些毛病的缘由是什么。
在进修VC++的历程当中,碰到的LNK2001毛病的毛病音讯重要为:
unresolved external symbol “symbol”(不肯定的外部“标记”)。
假如衔接顺序不能在一切的库和目的文件内找到所援用的函数、变量或标签,将发作此毛病音讯。
一般来讲,发作毛病的缘由有两个:一是所援用的函数、变量不存在、拼写不准确或许运用毛病;
其次可以运用了差异版本的衔接库。
编程中常常能碰到LNK2005毛病——反复定义毛病,实在LNK2005毛病并非一个很难处置惩罚的毛病.
27引见一下STL,细致申明STL怎样完成vector。
STL (范例模版库,Standard Template Library)它由容器算法迭代器构成。
STL有以下的一些长处:
可以轻易轻易地完成搜刮数据或对数据排序等一系列的算法;
调试顺序时越发平安和轻易;
即使是人们用STL在UNIX平台下写的代码你也可以很轻易地明白(因为STL是跨平台的)。
vector本质上就是一个动态数组,会依据数据的增添,动态的增添数组空间。
28引见一下模板和容器。怎样完成?(或许会让你就地举例完成)
模板可以说比较古老了,然则当前的泛型编程本质上就是模板编程。
它表现了一种通用和泛化的头脑。
STL有7种重要容器:vector,list,deque,map,multimap,set,multiset.
29 :简述多态完成的道理
编译器发明一个类中有虚函数,便会马上为此类生成虚函数表 vtable。虚函数表的各表项为指向对应虚函数的指针。编译器还会在此类中隐含插进去一个指针vptr(对vc编译器来讲,它插在类的第一个位置上)指向虚函数表。挪用此类的构造函数时,在类的构造函数中,编译器会隐含执行vptr与vtable的关联代码,将vptr指向对应的vtable,将类与此类的vtable联络了起来。别的在挪用类的构造函数时,指向基础类的指针此时已变成指向详细的类的this指针,如许依托此this指针即可获得准确的vtable,。云云才真正与函数体举行衔接,这就是动态联编,完成多态的基础道理。
30:谈谈你对面向对象的熟悉
剖析:面向对象可以明白成看待每一个题目,都是起首要肯定这个题目由几个部份构成,而每一个部份实在就是一个对象。然后再离别设想这些对象,末了获得全部顺序。传统的顺序设想多是基于功用的头脑来举行斟酌和设想的,而面向对象的顺序设想则是基于对象的角度来斟酌题目。如许做可以使得顺序越发的简约清楚。
申明:编程中打仗最多的“面向对象编程手艺”仅仅是面向对象手艺中的一个构成部份。发挥面向对象手艺的上风是一个综合的手艺题目,不仅须要面向对象的剖析,设想和编程手艺,而且须要借助必要的建模和开辟工具。
31 C++中为何用模板类。
剖析:
1) 可用来竖立动态增进和减小的数据构造
2) 它是范例无关的,因而具有很高的可复用性。
3) 它在编译时而不是运行时搜检数据范例,保证了范例平安
4) 它是平台无关的,可移植性
5) 可用于基础数据范例
32 函数模板与类模板有什么辨别?
答:函数模板的实例化是由编译顺序在处置惩罚函数挪用时自动完成的,而类模板的实例化
必需由顺序员在顺序中显式地指定。
33 .winsock竖立衔接的重要完成步骤? (非常重要,必问)
答:服务器端:socker()竖立套接字,绑定(bind)并监听(listen),用accept()
守候客户端衔接。
客户端:socker()竖立套接字,衔接(connect)服务器,衔接上后运用send()和recv(
),在套接字上写读数据,直至数据交换终了,closesocket()封闭套接字。
服务器端:accept()发明有客户端衔接,竖立一个新的套接字,自身从新开始守候连
接。该新发作的套接字运用send()和recv()写读数据,直至数据交换终了,closesock
et()封闭套接字。
34 历程和线程的差异。
答:线程是指历程内的一个执行单元,也是历程内的可调理实体.与历程的辨别:
(1)调理:线程作为调理和分派的基础单元,历程作为具有资本的基础单元
(2)并发性:不仅历程之间可以并发执行,同一个历程的多个线程之间也可并发执行
(3)具有资本:历程是具有资本的一个自力单元,线程不具有体系资本,但可以接见隶属于历程的资本.
(4)体系开支:在竖立或取消历程时,因为体系都要为之分派和接纳资本,致使体系的开支显著大于竖立或取消线程时的开支。
35. C++是不是是范例平安的?
答案:不是。两个差异范例的指针之间可以强迫转换(用reinterpret cast)。C#是范例平安的。
假如用VC开辟顺序,罕见这么几个毛病,C2001,c2005,c2011,这些毛病的缘由是什么。
37宏与内联函数的辨别
剖析:内联函数和宏都是在顺序涌现的处所睁开,内联函数不是经由历程函数挪用完成的,是在挪用该函数的顺序处将它睁开(在编译时期完成的);宏同样是;
差异的是:内联函数可以在编译时期完成诸如范例检测,语句是不是准确等编译功用;宏就不具有如许的功用,而且宏睁开的时候和内联函数也是差异的(在运行时期睁开)
38 win32中音讯轮回Windows顺序的进口是那里?写出Windows音讯机制的流程
剖析:Windows顺序的进口是WinMain()函数。
Windows应用顺序音讯处置惩罚机制:
A. 操纵体系吸收应用顺序的窗口音讯,将音讯投递到该应用顺序的音讯行列中
B. 应用顺序在音讯轮回中挪用GetMessage函数从音讯行列中掏出一条一条的音讯,掏出音讯后,应用顺序可以对音讯举行一些预处置惩罚。
C. 应用顺序挪用DispatchMessage,将音讯回传给操纵体系。
D. 体系应用WNDCLASS构造体的lpfnWndProc成员保留的窗口历程函数的指针挪用窗口历程,对音讯举行处置惩罚。
39:谈谈你对编程范例的明白或熟悉
编程范例可总结为:顺序的可行性,可读性、可移植性以及可测试性。
申明:这是编程范例的总纲目,口试者不一定要去背诵上面给出的那几个例子,应该去明白这几个例子申明的题目,想想,本身怎样处置惩罚可行性、可读性、可移植性以及可测试性这几个题目,连系以上几个例子和本身日常平凡的编程习气来回覆这个题目。
40流操纵符重载为何返回援用
在顺序中,流操纵符>>和<<常常一连运用。因而这两个操纵符的返回值应该是一个依旧支撑这两个操纵符的流援用。其他的数据范例都没法做到这一点。
注重:除了在赋值操纵符和流操纵符以外的其他的一些操纵符中,如+、-、*、/等却万万不能返回援用。因为这四个操纵符的对象都是右值,因而,它们必需构造一个对象作为返回值。
41 是不是是一个父类写了一个virtual 函数,假如子类掩盖它的函数不加virtual ,也能完成多态?
virtual润饰符会被隐形继承的。private 也被集成,只事派生类没有接见权限罢了。virtual可加可不加。子类的空间里有父类的一切变量(static除外)。同一个函数只存在一个实体(inline除外)。子类掩盖它的函数不加virtual ,也能完成多态。在子类的空间里,有父类的私有变量。私有变量不能直接接见。
42.C和C++有什么差异?
从机制上:c是面向历程的(但c也可以编写面向对象的顺序);c++是面向对象的,供应了类。然则,c++编写面向对象的顺序比c轻易
从实用的方向:c合适请求代码体积小的,效力高的场所,如嵌入式;c++合适更上层的,庞杂的; llinux中心大部份是c写的,因为它是体系软件,效力请求极高。
从称号上也可以看出,c++比c多了+,申明c++是c的超集;那为何不叫c+而叫c++呢,是因为c++比
c来讲扩大的东西太多了,所以就在c背面放上两个+;于是就成了c++
C言语是构造化编程言语,C++是面向对象编程言语。
C++侧重于对象而不是历程,侧重于类的设想而不是逻辑的设想。
43预处置惩罚器标识#error的目的是什么?
假如你不晓得答案,请看参考文献1。这题目对辨别一个一般的店员和一个书呆子是很有效的。只需书呆子才会读C言语教材的附录去找出象这类
题目的答案。固然假如你不是在找一个书呆子,那末应试者最好愿望本身不要晓得答案。
44.请简述以下两个for轮回的优缺点
// 第一个
for (i=0; i++;){if (condition)DoSomething();else DoOtherthing();}
// 第二个
if (condition){for (i=0; i++;)DoSomething();}
else{for (i=0; i++;)DoOtherthing();}
填空和选择题:
1。下面哪些运算符不能被重载? ( )
A. 做用域运算符“::”
B. 对象成员运算符“.”
C. 指针成员运算符“->”
D. 三目运算符“? :”
剖析:没有什么来由 ABD都不可
2. 在以下有关C++类的形貌中,不准确的是
A.C++言语引入类重要起两个作用,作为数据封装机制和作为范例定义机制
B.C++类中定义的数据和函数离别称为数据成员和成员函数
C.C++类作为数据封装机制,将数据及作用于数据的操纵构造在一起,完成了信息隐蔽
D.C++类中的成员可分为四种:公有成员、庇护成员、私有成员和友元
准确答案:D
3.设有int x = 123,语句 可发作“+123”情势的输出(“”代表空格)。
A.cout << setw (8) << showpos << x << endl;
B.cout << setw (8) << showpos << internal << x << endl;
C.cout << setw (8) << showpos << left << x << endl;
D.cout << showpos << internal << x << endl;
准确答案:B
4. 类模板的声明语句中,准确的是
A.template<T> class Sample {…};
B.template<class T1, T2> class Sample {…};
C.template<typename T1, class T2> class Sample {…};
D.template<Class T> Sample {…};
准确答案:C
5非C++内建型别 A 和 B,在哪几种情况下B能隐式转化为A?[C++中等]
a. class B : public A { ……}
b. class B { operator A( ); }
c. class A { A( const B& ); }
d. A& operator= ( const A& );
剖析:第一项 B公有继承自A,可所以间接继承的。第二项: B完成了隐式转化为A的转化
第三项:A完成了non-explicit的参数为B(可以有其他带默许值的参数)构造函数
第四项: 赋值操纵,虽不是正宗的隐式范例转换,但也可以委曲算一个
6关于this指针的说法毛病的是( A )
this指针必需显现申明
当竖立一个对象后,this指针就指向该对象
成员函数具有this指针
静态成员函数不具有this指针
7.下面函数原型声明中,( B )声清楚明了fun为纯虚函数
A . void fun()=0;
B virtual void fun()=0;
C virtual void fun();
D virtual void fun(){};
8友元运算符obj>obj2被C++编译器解释为( A )。
operator>(obj1,obj2)
>(obj1,obj2)
obj2.operator>(obj1)
obj1.oprator>(obj2)
9.假定AB为一个类,则执行“AB a(4),b[3],*p[2];”语句时,自动挪用该类构造函数的次数为:B
A) 3 B) 4 C) 6 D) 9
10.假定要对类AB定义加号操纵符重载成员函数,完成两个AB类对象的加法,并返回相加效果,则该成员函数的声明语句为:B
A) AB operator+(AB &a,AB &b)
B) AB operator+(AB &a)
C) operator+(AB a)
D) AB & operator+()
11.有二维字符数组char s[4][6]={"zhang","gao","tang","wang"};执行顺序cout<<*s[2],屏幕上显现:D
A)gao B)tang C)g D)t
12 #include<iostream>打印效果是多少
using namespace std; class A1{ public: int a; static int b; A1(); ~A1(); }; int main() { cout << sizeof(A1) <<endl; }
剖析:是4, 静态变量是存放在全局数据区的, 而sizeof是盘算部分栈中分派的大小。
13.死锁的处置惩罚
剖析:鸵鸟战略、防备战略、防止战略、检测与消除死锁,只需晓得观点就行,不须要控制
14. 非C++内建型别 A 和 B,在哪几种情况下B能隐式转化为A?[C++中等]
剖析:a. class B : public A { ……} // B公有继承自A,可所以间接继承的
b. class B { operator A( ); } // B完成了隐式转化为A的转化
c. class A { A( const B& ); } // A完成non-explicit的参数为B(可有其他带默许值的参数)构造函数
d. A& operator= ( const A& ); // 赋值操纵,虽不是正宗的隐式范例转换,但也可以委曲算一个
15以下代码有什么题目?[STL易]
typedef vector IntArray;
IntArray array;
array.push_back( 1 );
array.push_back( 2 );
array.push_back( 2 );
array.push_back( 3 );
// 删除array数组中一切的2
for( IntArray::iterator itor=array.begin(); itor!=array.end(); ++itor )
{
if( 2 == *itor ) array.erase( itor );
}
剖析:实在内里隐蔽着一个很严重的毛病:当veci.erase(iter)以后,iter就变成了一个野指针,对一个野指针举行 iter++ 是肯定会失足的。
16 以下代码的输出值是多少?
class A{};
class A1{};
class B : public A{};
class C : public A, public A1{};
class D : public virtual A{};
cout << sizeof ( A ) << endl;
cout << sizeof ( B ) << endl;
cout << sizeof ( C ) << endl;
cout << sizeof ( D ) << endl;
剖析:答案:1, 1, 1,4申明:空类所占的空间为1,单一继承的空类空间也为1,多重继承的空类空间照样1, 然则虚继承涉及到虚表(虚指针),所以大小为4。
相干文章:
分享125个基础的C#口试问答
口试题一,口试题
以上就是C++精选口试题,一定要相识的细致内容,更多请关注ki4网别的相干文章!