【C++】刷题日记(day1)

简介: 刷题是我们学习编程的一个重要模块,刷题能帮助我们巩固我们学习的知识,能够增强我们的编程水平,本文总共讲了5题有关多态的选择题,以及两道牛客编程题,希望大家读后能够有所收获!

刷题是我们学习编程的一个重要模块,刷题能帮助我们巩固我们学习的知识,能够增强我们的编程水平,接下来就让我们一起来学习吧。

53795b4d726dec27b04ad864344b1c4.jpg

       绳锯木断,水滴石穿!

一、选择题

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、完全数计算

image.png

分析题意:输入n以内的完全数,完全数就是除了自身外的真因子相加等于自身,所以用两层for循环,把符合的数输出来就可以了。

#include<iostream>#include<string>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、扑克牌大小

image.png

image.png

这题难度较大,大家根据代码来理解一下会更好。

#include <string>#include <vector>#include <iostream>usingnamespacestd;
#define PrintS1 {cout << s1 << endl;return 0;}#define PrintS2 {cout << s2 << endl;return 0;}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;
}

总结

1646036764469.jpg

本文总共讲了5题有关多态的选择题,以及两道牛客编程题,希望大家读后能够有所收获!

相关文章
|
算法 C语言 C++
从C语言的使用转换到C++(上篇)——刷题、竞赛篇
从C语言的使用转换到C++(上篇)——刷题、竞赛篇
270 0
|
存储 C++
【五一创作】C++刷题 【入门4】数组
【五一创作】C++刷题 【入门4】数组
110 0
|
机器学习/深度学习 存储 人工智能
【c++百日刷题计划】 ———— DAY12,奋战百天,带你熟练掌握基本算法
【c++百日刷题计划】 ———— DAY12,奋战百天,带你熟练掌握基本算法
211 0
|
5月前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
5月前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-1
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
6月前
|
C语言 C++
【C语言/C++】牛客网刷题训练-12
【C语言/C++】牛客网刷题训练-12
|
6月前
|
存储 自然语言处理 C++
刷题用到的非常有用的函数c++(持续更新)
刷题用到的非常有用的函数c++(持续更新)
84 1
|
存储 C语言 C++
【C/C++刷题——leetcode】查找字符串中最大的子串
【C/C++刷题——leetcode】查找字符串中最大的子串
302 0
|
机器学习/深度学习 人工智能 C++
【c++百日刷题计划】 ———— DAY16,刷题百天,养成刷题好习惯
【c++百日刷题计划】 ———— DAY16,刷题百天,养成刷题好习惯
189 0
【c++百日刷题计划】 ———— DAY16,刷题百天,养成刷题好习惯
|
存储 算法 C++
【c++百日刷题计划】 ———— DAY13,奋战百天,带你熟练掌握基本算法
【c++百日刷题计划】 ———— DAY13,奋战百天,带你熟练掌握基本算法
336 0