刷题是我们学习编程的一个重要模块,刷题能帮助我们巩固我们学习的知识,能够增强我们的编程水平,接下来就让我们一起来学习吧。
绳锯木断,水滴石穿!
一、选择题
1、下面有关虚函数和非虚函数的区别说法错误的是?
A、子类的指针访问非虚函数访问的是子类的方法
B、父类的指针访问虚函数访问的是父类的方法
C、父类的指针访问非虚函数访问的是父类的方法
D、子类的指针访问虚函数访问的是子类的方法
答案B。分析:父类的指针访问虚函数访问可能是父类的方法,也可能是子类的方法,因为父类的指针访问虚函数是运行时确定的。
2、下面关于多态性的描述,错误的是()
A、编译时的多态性可通过函数重载实现
B、运行时的多态性可通过模板和虚函数实现
C、实现运行时多态性的机制称为动态绑定
D、C++语言的多态性分为编译时的多态性和运行时的多态性
答案B。多态分为编译时多态和运行时多态,编译时多态是依靠模板和继承实现的,而运行时多态是靠虚函数确定的。
3、当一个类的某个函数被说明为virtual,则在该类的所有派生类中的同原型函数
A.只有被重新说明时才识虚函数
B.只有被重新说明为virtual时才是虚函数
C.都不是虚函数
D.都是虚函数
答案D。分析:(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。 (2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual 关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)该题就是第二种情况,所以选D。
4、以下关于C++的描述中哪一个是正确的()
子类指针不可以指向父类实例
任何引用都必须指向一个实例
引用所指向的实例不可能无效
任何指针都必须指向一个实例
答案:B。分析:任何引用都必须指向一个实例,但是指针可以不用指向实例。
5、调用一成员函数时,使用动态联编的情况是()
A、通过对象调用静态函数
B、通过指针或引用调用一虚函数通过指针或引用调用一虚函数
C、通过对象调用一虚函数
D、通过指针或者引用调用一静态函数
答案:B。分析:动态联编的概念:
动态联编就是程序在运行的时候知道该调用哪个函数,而不是编译阶段,所以这个机制应该是由虚函数支持的,即运行时的多态,基类的某个成员函数声明为虚函数,派生类继承,而且同样重写该函数,那么当声明一个派生类的指针或者引用时,它所调用的函数是由该指针指向的对象确定的,这就是动态联编。由概念可知是选B。
二、牛客编程题
1、完全数计算
分析题意:输入n以内的完全数,完全数就是除了自身外的真因子相加等于自身,所以用两层for循环,把符合的数输出来就可以了。
usingnamespacestd; intmain() { intn; intcnt=0; cin>>n; for (inti=1; i<n; i++) { intsum=0; for (intj=1; j<=i; j++) { if (i%j==0) sum+=j; } if (sum==2*i) cnt++; } cout<<cnt<<endl; return0; }
2、扑克牌大小
这题难度较大,大家根据代码来理解一下会更好。
usingnamespacestd; intcount(string&str){ intn=0; string::size_typei=0 , k=0; while ((k=str.find(' ',i)) !=string::npos){ n++;i=k+1; } returnn; } intmain(){ stringinput; getline(cin, input); strings1, s2; intt=input.find('-'); s1=input.substr(0, t); s2=input.substr(t+1); intn1=count(s1); intn2=count(s2); stringPOKER="345678910JQKA2jokerJOKER"; vector<string>MAX= { "joker JOKER", "JOKER joker" }; if (s1==MAX[0] ||s1==MAX[1]) PrintS1if (s2==MAX[0] ||s2==MAX[1]) PrintS2if (n1==n2){ stringf1, f2; string::size_typek=s1.find(' '); f1=s1.substr(0, k); k=s2.find(' '); f2=s2.substr(0, k); if (POKER.find(f1) >POKER.find(f2))PrintS1PrintS2} if (n1==3&&n2!=3) PrintS1if (n2==3&&n1!=3) PrintS2cout<<"ERROR"<<endl; }
总结
本文总共讲了5题有关多态的选择题,以及两道牛客编程题,希望大家读后能够有所收获!