基类与派生类的函数同名或不同名解决方法
《java语言基础》考试题
《java语言基础》练习题一、单项选择题1.Java是从()语言改进重新设计。
A.Ada B.C++ C.Pasacal D.BASIC答案:B2.下列语句哪一个正确()A.Java程序经编译后会产生machine codeB.Java程序经编译后会产生byte codeC.Java程序经编译后会产生DLLD.以上都不正确答案:B3.下列说法正确的有()A.class中的constructor不可省略B.constructor必须与class同名,但方法不能与class同名C.constructor在一个对象被new时执行D.一个class只能定义一个constructor答案:C4.提供Java存取数据库能力的包是()A.java.sql B.java.awt C.ng D.java.swing答案:A5.下列运算符合法的是()A.&& B.<> C.if D.:=答案:A6.执行如下程序代码a=0;c=0;do{--c;a=a-1;}while(a>0);后,C的值是()A.0 B.1 C.-1 D.死循环答案:C7.下列哪一种叙述是正确的()A.abstract修饰符可修饰字段、方法和类B.抽象方法的body部分必须用一对大括号{ }包住C.声明抽象方法,大括号可有可无D.声明抽象方法不可写出大括号答案:D8.下列语句正确的是()A.形式参数可被视为local variableB.形式参数可被字段修饰符修饰C.形式参数为方法被调用时,真正被传递的参数D.形式参数不可以是对象答案:A9.下列哪种说法是正确的()A.实例方法可直接调用超类的实例方法B.实例方法可直接调用超类的类方法C.实例方法可直接调用其他类的实例方法D.实例方法可直接调用本类的类方法答案:D二、多项选择题1.Java程序的种类有()A.类(Class)B.Applet C.Application D.Servlet答案:BC2.下列说法正确的有()A.环境变量可在编译source code时指定B.在编译程序时,所能指定的环境变量不包括class path C.javac一次可同时编译数个Java源文件D.javac.exe能指定编译结果要置于哪个目录(directory)答案:BCD3.下列标识符不合法的有()A.new B.$Usdollars C.1234 D.car.taxi答案:ACD4.下列说法错误的有()A.数组是一种对象B.数组属于一种原生类C.int number=[]={31,23,33,43,35,63}D.数组的大小可以任意改变答案:BCD5.不能用来修饰interface的有()A.private B.public C.protected D.static答案:ACD6.下列正确的有()A.call by value不会改变实际参数的数值B.call by reference能改变实际参数的参考地址C.call by reference不能改变实际参数的参考地址D.call by reference能改变实际参数的内容答案:ACD7.下列说法错误的有()A.在类方法中可用this来调用本类的类方法B.在类方法中调用本类的类方法时可直接调用C.在类方法中只能调用本类中的类方法D.在类方法中绝对不能调用实例方法答案:ACD8.下列说法错误的有()A.Java面向对象语言容许单独的过程与函数存在B.Java面向对象语言容许单独的方法存在C.Java语言中的方法属于类中的成员(member)D.Java语言中的方法必定隶属于某一类(对象),调用方法与过程或函数相同答案:ABC9.下列说法错误的有()A.能被java.exe成功运行的java class文件必须有main()方法B.J2SDK就是Java APIC.Appletviewer.exe可利用jar选项运行.jar文件D.能被Appletviewer成功运行的java class文件必须有main()方法答案:BCD三、判断题1.Java程序中的起始类名称必须与存放该类的文件名相同。
C#面试题目带完整答案
创作编号:GB8878185555334563BT9125XW创作者:凤呜大王*C# 面试题集1、C#中property 与attribute的区别,他们各有什么用处,这种机制的好处在哪里?A:property和attribute汉语都称之为属性。
不过property是指类向外提供的数据区域。
而attribute则是描述对象在编译时或运行时属性的。
这两者是有本质区别的2、讲一讲你理解的web service,在dot net framework中,怎么很好的结合xml?(讲概念就行了)从表面上看,Web Service就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。
这就是说,你能够用编程的方法通过Web调用来实现某个功能的应用程序。
从深层次上看,Web Service是一种新的Web应用程序分支,它们是自包含、自描述、模块化的应用,可以在网络(通常为Web)中被描述、发布、查找以及通过Web来调用。
可扩展的标记语言XML是Web Service平台中表示数据的基本格式。
除了易于建立和易于分析外,XML主要的优点在于它既与平台无关,又与厂商无关。
XML是由万维网协会(W3C)创建,W3C制定的XML SchemaXSD定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。
Web Service平台是用XSD来作为数据类型系统的。
当你用某种语言如或C#来构造一个Web Service时,为了符合Web Service标准,所有你使用的数据类型都必须被转换为XSD类型。
如想让它使用在不同平台和不同软件的不同组织间传递,还需要用某种东西将它包装起来。
这种东西就是一种协议,如SOAP。
3. C#, Java 和c++的特点,有什么相同的地方,不同的地方,C#分别从c++和java中吸取了他们那些优点?4. C#可否对内存进行直接的操作?(这可是个难点哦?要注意!)5. 用Visual C++6.0编写的代码(unmanaged code),如何在CLR下和其他dot net component结合?6. 用C#实现以下功能a 产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。
C++第三章课后答案
C++第三章课后答案C++第三章习题及答案1、什么是结构化程序设计?它有什么优缺点?所谓结构化程序设计,是一种自顶而下、逐步求精的模块化程序设计方法。
2、什么是对象?什么是类?简述对象与类之间的关系!对象是系统中用来描述客观事物的一个实体,它是用于构成系统的一个基本单位,而系统可以看作是由一系列相互作用的对象组成。
类定义了同类对象的公共属性和行为,属性用数据结构表示,行为用函数表示!《类=数据结构+对数据进行操作的函数》。
对象和类的关系相当于元素和集合的关系、变量和变量的“数据类型”的关系。
从程序设计的角度来说,类是一种复杂的自定义数据类型,对象是属于这种数据类型的变量。
3、什么是面向对象程序设计?面向对象程序设计方法具有哪些基本特征?请比较面向对象程序设计和面向对象过程程序设计有何异同?4、何谓成员变量?何谓成员函数?C++将对象的属性抽象为数据成员,将对象的行为抽象为成员函数。
5、C++中结构和类之间有何异同?结构在默认情况下的成员是公共的,而类在默认情况下的成员是私有的。
在C++中,结构是特殊的类。
6、在C++中如何定义类?如何实现定义的类?如何利用类申明对象?7、类的成员的访问权限有哪几种?请说明它们分别有什么作用?三种,privte:类的私有成员,只能被本类的成员函数访问或调用。
Public:公有成员,可以被本类的成员或其他类的成员函数(通过对象)访问或调用。
Protected:保护成员,可以被本类的成员函数或派生类的成员函数访问或调用。
8、何谓构造函数?何谓析构函数?请说明它们分别有什么作用?构造函数:不需要用户程序调用,就能在创建对象时由系统自动调用,其作用是在对象被创建时利用初始值去构造对象,使得在声明对象时就能自动完成对象的初始化。
析构函数:在对象的生存周期即将结束时由系统自动调用的,其作用是用来在对象被删除前做一些清理工作和数据保存工作。
9、如何定义一个内联成员函数?内联函:内联函数必须是和函数体申明在一起,才有效。
c++多态性与虚函数习题答案
多态性与虚函数1.概念填空题1.1 C++支持两种多态性,分别是编译时和运行时。
1.2在编译时就确定的函数调用称为静态联编,它通过使用函数重载,模板等实现。
1.3在运行时才确定的函数调用称为动态联编,它通过虚函数来实现。
1.4虚函数的声明方法是在函数原型前加上关键字virtual。
在基类中含有虚函数,在派生类中的函数没有显式写出virtual关键字,系统依据以下规则判断派生类的这个函数是否是虚函数:该函数是否和基类的虚函数同名;是否与基类的虚函数参数个数相同、类型;是否与基类的虚函数相同返回类型。
如果满足上述3个条件,派生类的函数就是虚函数。
并且该函数覆盖基类的虚函数。
1.5 纯虚函数是一种特别的虚函数,它没有函数的函数体部分,也没有为函数的功能提供实现的代码,它的实现版本必须由派生类给出,因此纯虚函数不能是友元函数。
拥有纯虚函数的类就是抽象类类,这种类不能实例化。
如果纯虚函数没有被重载,则派生类将继承此纯虚函数,即该派生类也是抽象。
3.选择题3.1在C++中,要实现动态联编,必须使用(D)调用虚函数。
A.类名B.派生类指针C.对象名D.基类指针3.2下列函数中,不能说明为虚函数的是(C)。
A.私有成员函数B.公有成员函数C.构造函数D.析构函数3.3在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数的返回值(A)。
A.相同B.不同C.相容D.部分相同3.4当一个类的某个函数被说明为virtual时,该函数在该类的所有派生类中(A)。
A.都是虚函数B.只有被重新说明时才是虚函数C.只有被重新说明为virtual时才是虚函数D.都不是虚函数3.5(C)是一个在基类中说明的虚函数,它在该基类中没有定义,但要求任何派生类都必须定义自己的版本。
A.虚析构函数B.虚构造函数C.纯虚函数D.静态成员函数3.6 以下基类中的成员函数,哪个表示纯虚函数(C)。
A.virtual void vf(int);B.void vf(int)=0;C.virtual void vf( )=0;D.virtual void vf(int){ }3.7下列描述中,(D)是抽象类的特性。
C_C++面试常见问题
C/C++面试常见问题1.new、delete、malloc、free关系delete会调用对象的析构函数,和new对应free只会释放内存,new调用构造函数。
malloc 与free是C++/C语言的标准库函数,new/delete是C++的运算符。
它们都可用于申请动态内存和释放内存。
对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。
对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。
由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。
因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。
注意new/delete不是库函数。
2.delete与delete []区别delete只会调用一次析构函数,而delete[]会调用每一个成员的析构函数。
在More Effective C++中有更为详细的解释:“当delete操作符用于数组时,它为每个数组元素调用析构函数,然后调用operatordelete来释放内存。
”delete与New配套,delete []与new []配套MemTest*mTest1=newMemTest[10];MemTest*mTest2=newMemTest;int*pInt1=newint[10];int*pInt2=newint;delete[]pInt1; //-1-delete[]pInt2; //-2-delete[]mTest1;//-3-delete[]mTest2;//-4-在-4-处报错。
这就说明:对于内建简单数据类型,delete和delete[]功能是相同的。
对于自定义的复杂数据类型,delete和delete[]不能互用。
delete[]删除一个数组,delete删除一个指针简单来说,用new分配的内存用delete删除用new[]分配的内存用delete[]删除delete[]会调用数组元素的析构函数。
C语言里面构造函数和析构函数的运用办法
C语言里面构造函数和析构函数的运用办法C语言里面构造函数和析构函数的运用办法摘要:构造函数与析构函数是一个类中看似较为简单的两类函数,但在实际运用过程中总会出现一些意想不到的运行错误。
本文将较系统的介绍构造函数与析构函数的原理及在C#中的运用,以及在使用过程中需要注意的若干事项。
关键字:构造函数;析构函数;垃圾回收器;非托管资源;托管资源一.构造函数与析构函数的原理作为比C更先进的语言,C#提供了更好的机制来增强程序的安全性。
C#编译器具有严格的类型安全检查功能,它几乎能找出程序中所有的语法问题,这的确帮了程序员的大忙。
但是程序通过了编译检查并不表示错误已经不存在了,在“错误”的大家庭里,“语法错误”的地位只能算是冰山一角。
级别高的错误通常隐藏得很深,不容易发现。
根据经验,不少难以察觉的程序错误是由于变量没有被正确初始化或清除造成的,而初始化和清除工作很容易被人遗忘。
微软利用面向对象的概念在设计C#语言时充分考虑了这个问题并很好地予以解决:把对象的初始化工作放在构造函数中,把清除工作放在析构函数中。
当对象被创建时,构造函数被自动执行。
当对象消亡时,析构函数被自动执行。
这样就不用担心忘记对象的初始化和清除工作。
二.构造函数在C#中的运用构造函数的名字不能随便起,必须让编译器认得出才可以被自动执行。
它的命名方法既简单又合理:让构造函数与类同名。
除了名字外,构造函数的另一个特别之处是没有返回值类型,这与返回值类型为void的函数不同。
如果它有返回值类型,那么编译器将不知所措。
在你可以访问一个类的方法、属性或任何其它东西之前,第一条执行的语句是包含有相应类的构造函数。
甚至你自己不写一个构造函数,也会有一个缺省构造函数提供给你。
class TestClass{public TestClass(): base() {} // 由CLR提供}下面列举了几种类型的构造函数1)缺省构造函数class TestClass{public TestClass(): base() {}}上面已介绍,它由系统(CLR)提供。
C和C++经典笔试题及答案
C和C++经典笔试题及答案在C语言中,两个函数的名称不能相同,否则会导致编译错误。
而在C++中,函数名相同而参数数据类型不同或参数个数不同或二者皆不同的两个函数被解释为重载。
下面就由店铺为大家介绍一下C和C++经典笔试题及答案的文章,欢迎阅读。
C和C++经典笔试题及答案篇11. 用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)。
答案:#define SECONDS_PER_YEAR(60*60*24*365)UL应该意识到表达式将使一个16位机的整形数溢出,因此要用到长整型符号L,表达式中UL表示无符号长整型。
2. 写一个“标准”宏MIN,这个宏输入连个参数并返回较小的一个。
答案:#define MIN(A,B) ((A)<=(B)?(A):(B));懂得在宏中小心的吧参数用括号扩起来3. sizeof 的一些考察char* ss1=”0123456789”; char ss2[]=”0123456789”; char ss3[100]=”0123456789”;int ss4[100]; char q1[]=”abc”; char q2[]=”a\n”; char* q3=”a\n”;答案:ss1是一个字符指针,指针的大小是一个确定的值,就是4,sizeof(ss1)=4;ss2是一个字符数组,这个数组最初的大小未定,填充值是“0123456789”,一个字符占一位,再加上隐含的“\0”一共是11位。
ss3是一个字符数组,这个数组开始预分配100,所以它的大小是100位。
ss4是一个整型数组,但是每个整型变量所占空间是4,所以它的大小一共是400位。
q1与ss2类似,占4位。
Q2里面有一个“\n”,“\n”算作一位,加上隐含的,大小一共是3位。
Q3是一个字符指针,指针得大小是一个定值,就是4.4. What is the output of the following code?#includeusing namespace std;class A {};class A2 {char d,e;};struct B{};struct C{ char x,y;};struct D{int x,y;};main(){cout<cout<A *p1=new A();A p2;A*p3;cout<cout<cout<cout<cout<cout<return 0;}答案:对于一个类而言,即便它是一个空的类,编译器仍然要要给它一个空间,所以类A即便什么也没有,它的空间大小依然为1,而类A2大小是类中连个字符d,e之和,所以它的空间大小依然是2,至于p1,p2,p3,p1和p3是指针,大小是一致的,而且是定值,为4,p2是A的对象,所以它的大小和类A相等,为1,B和C得解释同A和A2,至于D,它和C不同点在于,结构体有两个整型变量,每个整型变量所占空间为4,所以D所占空间大小为8。
C与C++经典面试题(内存泄露)
C++提供了C连接交换指定符号extern“C”来解决名字匹配问题。
3.4一个类有基类、内部有一个其他类的成员对象,构造函数的执行顺序是怎样的。(Autodesk)
答:先执行基类的(如果基类当中有虚基类,要先执行虚基类的,其他基类则按照声明派生类时的顺序依次执行),再执行成员对象的,最后执行自己的。
{
if ( strDest == NULL || strSrc == NULL)
return NULL ;
if ( strDest == strSrc)
return strDest ;
char *tempptr = strDest ;
while( (*strDest++ = *strSrc++) != ‘\0’)
3.9.2那为什么有了new/delete,还要malloc/free呢?
3.10 #define DOUBLE(x) x+x (Autodesk)
i = 5*DOUBLE(10);i是多少?正确的声明是什么?
答案:i为60。正确的声明是#define DOUBLE(x) (x+x)
3.11有哪几种情况只能用intialization list而不能用assignment? (Autodesk)
掌握的页面替换算法nru最近不用fifo第二次机会页面替换算法lru最近最少使用算法315有四个同样的容器里面装满了粒数相同的药丸正常药丸的质量为m变质药丸的质量为m1现在已知这四个容器中有一个装的全是变质药丸用电子秤只称一次找出哪个容器装的是变质药丸microsoft答案
C++复习题及答案
A int a[10]B int a[2,5]
C int a[]D int *a[10]
6、如果变量x,y已经正确定义,下列语句哪一项不能正确将x,y的值进行交换(D)。
Ax=x+y,y=x-y,x=x-y
Bt=x,x=y;y=t
Ct=y,y=x,x=t
24、在定义int a[5][4];之后,对a的引用正确的是(C)。
A a[2][4]B a[5][0]
C a[0][0]D a[0,0]
25、在一个类的定义中,包含对什么成员的定义(C)。
A数据B函数
C数据和函数D数据或函数
26、在计算机上可以直接运行的程序是(D)。
AC++源程序B高级语言程序
C汇编语言程序D 机器语言程序
A 大小写字母B 下划线
C 连接符D 数字字符
17、若类X是类Y的友元类,则下列哪种访问关系是正确的(B)。
A 类X的成员不能访问类Y的私有成员
B 类X的成员可以访问类Y的私有成员
C 类Y的成员可以访问类X的私有成员
D 只有类Y的公共成员才能访问类X的私有成员
18、如果编程者没有显式定义构造函数(包括复制构造函数),C++编译器就(D)。
20、请写出与数学表达式4/3πR3相对应的C++表达式4.0/3*3.14*R*R*R。
21、在C++中,函数参数的两种传递方式分别是值传递和地址传递。
22、一个类和对象的关系,正如基本数据类型与该类型的变量一样,如int x;。
23、在一个类中定义常数据成员用关键字const,定义静态数据成员用关键字static。
西安联合信息考核题
三、从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内
存的生存期由我们决定,使用非常灵活,但问题也最多。
8.在C++程序中调用被C编译器编译后的函数,为什么要加extern“C”?
Printf(“%d,%d,%d”,a,b,d);
}
13.写一个简单的冒泡排序
14.两个程序的优缺点
(1).for (i=0; i<N; i++)
{
if (condition)
DoSomething();
else
DoOtherthing();
}
(2).if (condition)
{
for (i=0; i<N; i++)
“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:
(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。
(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)
7.内存的分配方式的分配方式有几种?
答:一、从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的
整个运行期间都存在。例如全局变量。
二、在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执
行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高
10.如何判断一段程序是由C编译程序还是由C++编译程序编译的?
C++习题
类和对象1、下面关于类概念的描述中,____是错误的。
A.类是抽象数据类型的实现B.类是具有共同行为的若干对象的统一描述体C.类是创建对象的样板D.类是C语言中的结构体类型2、下列对重载函数的描述中,____是错误的。
A.重载函数中不允许使用默认参数B.重载函数中编译是根据参数表进行选择C.不要使用重载函数来描述毫无相干的函数D.构造函数重载将会给初始化带来多种方式3、有以下类的说明,请指出错误的地方。
Class sample{int a=2.5;sample();public:sample(int val);~sample();};4、有关析构函数的说法不正确的是____。
A、析构函数有且只有一个B、析构函数无任何函数类型C、析构函数和构造函数一样可以有形参D、析构函数的作用是在对象被撤消时收回先前分配的内存空间5、已知一个类sample,____是定义指向类sample成员函数的指针,假设类有三个公有成员:void f1(int), void f2(int)和int a.A. sample*pB. int sample::*pc=&sample::aC. void(sample::*pa)()D. sample *p[10]6、下列定义中,sample是一个类,____是定义指向对象数组的指针P。
A. sample *p[5]B. sample (*p)[5]C. (sample *p)p[5]D. sample *p[]7、下列程序的执行结果是Class sample{Public:Sample(){cout<<”constructore”<<endl;}};Void fn(int i)Cout<<”i=”<<i<<endl;}Void main(){fn(10);fn(20);}结果:constructorei=10i=208、改正下列程序中的错误Class point{Public:int x,y;public:point(int x,int y){point::x=x;Point::y=y;}};Void main(){Point data(5,5);Cout<<data.x<<endl;Cout<<data.y<<endl;}9、找出程序中的错误,并说明原因Class sample{Public:Static void f(sample my);Private: int n;};Void sample::f(){Cout<<n<<endl;}10、阅读以下程序,找出错误的地方,并说明原因。
继承与派生类答案
继承与派生类知识要点1.掌握继承和派生的定义,派生类的定义方法。
(1)掌握继承的两种类型:单继承和多继承。
(2)掌握private,public,protected三种继承方式的特点。
继承方式决定了基类中的成员在派生类中的属性。
三种继承方式的共同点:基类的private成员在派生类中不可见。
区别:对于私有继承,基类的public、protected成员在派生类中作为private成员;对于公有继承,基类的public、protected成员在派生类中访问属性不变;对于保护继承,基类的public、protected成员在派生类中作为protected成员。
(3)掌握派生类中的构造函数和析构函数的使用。
基类的构造函数和析构函数不能继承,所以必要时在派生类中定义自己的构造函数和析构函数。
派生列的构造函数完成基类中新增数据成员和基类数据成员的初始化,基类数据成员的初始化通过基类构造函数来实现。
(4)掌握派生类的同名覆盖规则。
(5)掌握赋值兼容规则。
基类对象可以使用公有派生类对象来代替,包括:派生类对象可以赋值给基类对象;派生类对象可以初始化基类对象的引用;基类类型指针可以指向派生类对象。
2.掌握多重继承的概念、定义方法、多重继承派生类构造函数的执行顺序。
派生类构造函数的执行顺序是先执行所有基类的构造函数(顺序按照定义派生类时指定的各基类顺序),在执行对象成员所在类的构造函数(顺序按照他们在类中的声明顺序),最后执行派生类构造函数体中的内容。
3.掌握虚基类的概念和定义方法。
在多重继承中,如果多条继承路径上有一个公共的基类,则在这些路径的汇合点上的派生类会产生来自不同路径的公共基类的多个拷贝,如果用virtual把公共基类定义成虚基类,则只会保留公共基类的一个拷贝。
典型例题分析与解答例题1:下列对派生类的描述中,()是错误的。
A.一个派生类可以作为另一个派生类的基类B.派生类至少有一个基类C.派生类的成员除了它自己的成员外,还包含了它的基类成员D.派生类中继承的基类成员的访问权限到派生类保持不变答案:D分析:一个派生类可以作为另一个派生类的基类。
C#面试基础问题
1.传入某个属性的set方法的隐含参数的名称是什么?value,它的类型和属性所声名的类型相同。
2.如何在C#中实现继承?在类名后加上一个冒号,再加上基类的名称。
3.C#支持多重继承么?不支持。
可以用接口来实现。
4.被protected修饰的属性/方法在何处可以访问?在继承或间接继承与这个类的子类中可以访问。
5.私有成员会被继承么?会,但是不能被访问。
所以看上去他们似乎是不能被继承的,但实际上确实被继承了。
6.请描述一下修饰符protected internal。
被protected internal修饰的属性/方法只能在它的在同一个程序集(Assembly)中的子类被访问。
7.C#提供一个默认的无参数构造函数,当我实现了另外一个有一个参数的构造函数时候,还想保留这个无参数的构造函数。
这样我应该写几个构造函数?两个,一旦你实现了一个构造函数,C#就不会再提供默认的构造函数了,所以需要手动实现那个无参数构造函数。
8.C#中所有对象共同的基类是什么?System.Object.9.重载和覆写有什么区别?重载提供了对一个方法签名的不同参数调用的实现。
覆写提供了子类中改变父类方法行为的实现。
10.在方法定义中,virtual有什么含意?被virtual修饰的方法可以被子类覆写。
11.能够将非静态的方法覆写成静态方法么?不能,覆写方法的签名必须与被覆写方法的签名保持一致,除了将virtual改为override。
12.可以覆写私有的虚方法么?不可以,甚至子类中无法访问父类中的私有方法。
13.能够阻止某一个类被其他类继承么?可以,使用关键字sealed。
14.能够实现允许某个类被继承,但不允许其中的某个方法被覆写么?可以,标记这个类为public,并标记这个方法为sealed。
15.什么是抽象类(abstract class)?一种不可以被实例化的类。
抽象类中一般含有抽象方法,当然也可有具体实现。
继承类只有实现过所有抽象类的抽象方法后才能被实例化。
函数重载(overload)、函数覆盖(override)
函数重载(overload)、函数覆盖(override)“overload”翻译过来就是:超载,过载,重载,超出标准负荷;“override”翻译过来是:重置,覆盖,使原来的失去效果。
先来说说重载的含义,在日常生活中我们经常要清洗一些东西,比如洗车、洗衣服。
尽管我们说话的时候并没有明确地说用洗车的方式来洗车,或者用洗衣服的方式来洗一件衣服,但是谁也不会用洗衣服的方式来洗一辆车,否则等洗完时车早就散架了。
考试大提示我们并不要那么明确地指出来就心知肚明,这就有重载的意思了。
在同一可访问区内被声名的几个具有不同参数列的(参数的类型、个数、顺序不同)同名函数,程序会根据不同的参数列来确定具体调用哪个函数,这种机制叫重载,重载不关心函数的返回值类型。
这里,“重载”的“重”的意思不同于“轻重”的“重”,它是“重复”、“重叠”的意思。
例如在同一可访问区内有:① double calculate(double);② double calculate(double,double);③ double calculate(double, int);④ double calculate(int, double);⑤ double calculate(int);⑥ float calculate(float);⑦ float calculate(double);六个同名函数calculate,①②③④⑤⑥中任两个均构成重载,⑥和⑦也能构成重载,而①和⑦却不能构成重载,因为①和⑦的参数相同。
覆盖是指派生类中存在重新定义的函数,其函数名、参数列、返回值类型必须同父类中的相对应被覆盖的函数严格一致,覆盖函数和被覆盖函数只有函数体(花括号中的部分)不同,当派生类对象调用子类中该同名函数时会自动调用子类中的覆盖版本,而不是父类中的被覆盖函数版本,考试大,提示这种机制就叫做覆盖。
下面我们从成员函数的角度来讲述重载和覆盖的区别。
成员函数被重载的特征有:1) 相同的范围(在同一个类中)2) 函数名字相同3) 参数不同4) virtual关键字可有可无覆盖的特征有:1) 不同的范围(分别位于派生类与基类)2) 函数名字相同3) 参数相同4) 基类函数必须有virtual关键字比如,在下面的程序中:#includeusing namespace std;class Base{public:void f(int x){ cout << "Base::f(int) " << x << endl; }void f(float x){ cout << "Base::f(float) " << x << endl; }virtual void g(void){ cout << "Base::g(void)" << endl;}};class Derived : public Base{public:virtual void g(void){ cout << "Derived::g(void)" << endl;}};void main(void){Derived d;Base *pb = &d;pb->f(42); // 运行结果: Base::f(int) 42pb->f(3.14f); // 运行结果: Base::f(float) 3.14pb->g(); // 运行结果: Derived::g(void)}函数Base::f(int)与Base::f(float)相互重载,而Base::g(void)被Derived::g(void)覆盖。
c++复习题及答案
1、填空题()多态分为:专用多态和通用多态。
2、选择题(10分)下面对构造函数的描述不正确的是(C )A 可以重载B 其名字与类名相同C 可以显式调用构造函数D 构造函数是成员函数E 构造函数不能是虚函数3、判断题(正确的请写T,错误的请写F)(20分)静态成员函数可以直接调用类中说明的非静态成员。
(F)windows应用程序采用基于消息的事件驱动运行机制。
(T)(一)填空题在类体内使用关键字(static )说明的成员称为静态成员。
2、重载的函数要求参数的(个数)和(类型)不同。
3、如果要表示某个变量的值不能修改,用修饰符(const )限制。
4、对函数int fun( int x,int y) 中的参数x指定默认值10 正确的声明方式是(int fun(int y,int x=10) )。
5、C++语言规定,成员函数如果被定义在类体内,则为默认为(内联成员函数)。
6、在类层次结构中,创建子类对象时,(派生类)构造函数最后被执行。
7、C++规定,运行多态性通过(基)类的指针或者(引用)调用(虚函数)来实现。
8、派生类的生成过程经历了三个步骤:(吸收基类成员)、(改造基类成员)和(添加新的成员)。
9、面向对象程序设计的4个基本特征是(抽象)、(继承)、(封装)、(多态)。
10、Windows应用程序采用基于(消息)的事件驱动运行机制。
11、通常将用来派生新类的类称为(基类),又称为父类,而将派生出来的新类称为(派生类),又称为子类。
12、含有(纯虚)函数的类称为抽象类。
13、引用与被引用的实体具有相同的(地址)。
14、类成员的访问权限有3种(共有类型)、(私有类型)、(保护类型)。
15、通过函数改变实参的数据,c++ 可以通过( 指针)或者(引用)实现。
16、c++通过(函数重载)实现静态多态性,其(形参个数或类型)必须不同。
18、c++类的用途有两种,一种是生成类的对象,另一种是通过(继承)派生出新类。
C++using关键字作用总结
C++using关键字作⽤总结1.在当前⽂件中引⼊命名空间这是我们最熟悉的⽤法,例如:using namespace std;2.在⼦类中使⽤ using 声明引⼊基类成员名称(参见C++ primer)在private或者protected继承时,基类成员的访问级别在派⽣类中更受限:class Base {public:std::size_t size() const { return n; }protected:std::size_t n;};class Derived : private Base { . . . };在这⼀继承层次中,成员函数 size 在 Base 中为 public,但在 Derived 中为 private。
为了使 size 在 Derived 中成为 public,可以在Derived 的 public部分增加⼀个 using 声明。
如下这样改变 Derived 的定义,可以使 size 成员能够被⽤户访问,并使 n 能够被 Derived的派⽣类访问:class Derived : private Base {public:using Base::size;protected:using Base::n;// ...};另外,当⼦类中的成员函数和基类同名时,⼦类中重定义的成员函数将隐藏基类中的版本,即使函数原型不同也是如此(隐藏条件见下⾯)。
如果基类中成员函数有多个重载版本,派⽣类可以重定义所继承的 0 个或多个版本,但是通过派⽣类型只能访问派⽣类中重定义的那些版本,所以如果派⽣类想通过⾃⾝类型使⽤所有的重载版本,则派⽣类必须要么重定义所有重载版本,要么⼀个也不重定义。
有时类需要仅仅重定义⼀个重载集中某些版本的⾏为,并且想要继承其他版本的含义,在这种情况下,为了重定义需要特化的某个版本⽽不得不重定义每⼀个基类版本,可能会令⼈厌烦。
可以在派⽣类中为重载成员名称提供 using 声明(为基类成员函数名称⽽作的 using 声明将该函数的所有重载实例加到派⽣类的作⽤域),使派⽣类不⽤重定义所继承的每⼀个基类版本。
C++知识点总结
类和对象初步1.类的定义在定义外成员函数的实现2.类的成员函数之间可以相互调用,类的成员函数也可以重载,也可设默认参数值3.一般来讲,一个对象占用的内存空间的大小等于其成员变量的体积之和。
每个对象都有自己的存储空间(成员变量),但成员函数只有一份对象名.成员名指针->成员名引用名.成员名4.private:一个类的私有成员,只能在该类的成员函数中才能访问public:proteced:5.class默认private struct默认public6.内联成员函数:成员函数名前加inline 或函数体写在类定义内部的成员函数。
执行更快,但会带来额外的内存开销构造函数1.构造函数全局变量在堆上,系统自动初始化为零。
局部变量在栈上,初始值是随机的,需要初始化。
2.构造函数:对对象进行初始化。
构造函数执行时对象的内存空间已经分配,构造函数的作用是初始化这片空间.可重载,不写的话有默认构造函数,但是如果编写了构造函数,那默认构造函数不会再执行.是一类特殊的成员函数。
不写返回值类型,函数名为类名.3.对象在生成时一定会调用某个构造函数,一旦生成,不再执行构造函数.4.P183 Ctest *pArray[3]={new Ctest(4),new Ctest(1,2)}5.复制构造函数:其是构造函数的一种,只有一个参数,为本类的引用,防止混淆,构造函数不能以本类的对象作为唯一的参数。
默认复制构造函数。
6.复制构造函数被调用的三种情形:1用一个对象去初始化另一个对象时Complex C1(C2)ComplexC2=C1; 2 函数的参数是类A的对象。
形参未必等于实参函数中用对象的引用不会调用复制构造函数void Function(const Complex &c)3 函数的返回值是类A的对象7.类型转换构造函数:除复制构造函数外,只有一个参数的构造函数C=68.析构函数:在对象消亡时调用,可以定义其做善后工作。
亚信科技面试题 亚信科技面试题及参考答案
亚信科技面试题亚信科技面试题及参考答案亚信的辉煌历程见证着中国通信行业的信息化发展进程。
亚信科技的求职竞争很激烈,准备好怎么回答面试题很关键,以下是WTT为大家收集到的亚信科技面试题,希望对大家有帮助!亚信科技面试题篇11. 排序算法时间复杂度,说出你喜欢的一种算法,说其原因插入排序 O(n^2)归并排序 O(nlog2n)快速排序最好 O(nlog2n) 最坏 O(n^2)冒泡排序 O(n^2)选择排序 O(n^2)堆排序 O(nlogn)希尔排序O(n^2)2. 逆序单链表3. 进程间通信有哪几种现在最常用的进程间通信的方式有:管道,信号,信号量,消息队列,共享内存,套接字(socket)。
(1) 管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。
进程的亲缘关系通常是指父子进程关系(2) 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。
它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。
因此,主要作为进程间以及同一进程内不同线程之间的同步手段(3) 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。
消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点(4) 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生(5) 共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。
共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。
它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
(6) 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信4. 进程和线程的区别简而言之,一个程序至少有一个进程,一个进程至少有一个线程.线程的划分尺度小于进程,使得多线程程序的并发性高。
另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
面向对象程序设计(C++)复习题(1)
一.选择题1.对类的构造函数和析构函数描述正确的是().A.构造函数可以重载,析构函数不能重载B.构造函数不能重载,析构函数可以重载C.构造函数可以重载,析构函数也可以重载D.构造函数不能重载,析构函数也不能重载2.继承具有( ),即当基类本身也是某一个类派生类时,底层的派生类也会自动继承间接基类的成员。
A)规律性 B。
传递性 C.重复性 D.多样性3.假设OneClass为一个类,则该类的复制初始化构造函数的声明语句为()。
A.OneClass(OneClass p);B。
OneClass& (OneClass p );C. OneClass(OneClass &p);D。
OneClass (OneClass *p);4.对于结构中定义的成员,其默认的访问权限为()。
A。
public B. protected C。
private D。
static5.下面对静态数据成员的描述中,不正确的是( )。
A.静态数据成员可以在类体内进行初始化B。
静态数据成员不可以在类体内进行初始化C.静态数据成员能受private控制符的作用D.静态数据成员调用前必须初始6。
C++中的类有两种用法:一种是类的实例化,即生成类对象,并参与系统的运行;另一种是通过()派生了新的类。
A.复用B。
继承C。
封装 D.引用7。
假定AA为一个类,a为该类公有的数据成员,x为该类的一个对象,则访问x对象中数据成员a的格式为().A. x(a) B。
x[a] C。
x-〉a D。
x.a9. 对于一个类的构造函数,其函数名与类名( )。
A。
完全相同 B。
基本相同 C。
不相同 D. 无关系10。
一个类的构造函数通常被定义为该类的( )成员。
A. 公有 B。
保护 C。
私有 D。
友元11. 一个类的析构函数通常被定义为该类的( )成员。
A. 私有B. 保护C。
公有 D. 友元12。
一个类的静态数据成员所表示属性()。
A。
是类的或对象的属性 B。
C++填空题
填空题1.C++中只用两个逻辑常量:true和:false。
2.#include指令指示编辑器将一个源程序嵌入到到该指令的源文件中。
3.对数组进行升幂排序,反转,复制数组的内容等操作需要包含头文件:<algorithm>.4.如果调用函数时,需要改变实参或者返回多个值,应该采取:传地址值的方式。
5.使用关键字:inline 说明函数是内联函数。
6.C++结构体中的成员默认的访问权限为:public。
7.函数fun的返回值是一个整形数据的引用,有两个参数都是int,声明fun函数的原型是:int &fun(int,int).8.程序需要执行键盘输入时,使用:》提取运算符。
9.C++程序一般可以分为4个部分:程序的主函数,全局说明,:预处理指令和用户自定义的函数。
10.决定C++语言中函数返回类型的是;定义函数时的数据类型。
11.两种重要的程序设计方法,分别是结构化程序设计和:面向对象的程序设计。
12.C++语言支持:引用,实际上就是变量的别名。
13.C++提供了两种格式控制方式,使用ios_base类提供的接口和使用带操作符的特殊函数。
14.在结构体中定义的函数称为:成员函数。
15.在C++标准库中,使用complex类来表示复数。
16.类的继承是指派生类继承基类的数据成员和:成员函数。
17.在STL库中用于查找数组内容的函数是:find。
18.在类定义时,如果没有定义任何构造函数,则编译器自动生成一个:无参数的默认构造函数。
19.析构函数名是在类名前加上:~符号,用来释放对象所占的内存空间。
20.设A为test类的对象且赋有初值,则语句test B(A);表示:用对象A 初始化对象B。
21.静态数据成员初始化时,前面不加:static关键字,以免与一般静态变量或者对象混淆。
22.在类中声明const数据成员时,只能通过:初始化列表的方式来对该成员进行初始化。
23.在建立派生类对象时,先执行:基类的构造函数。