A:虚函数的作用是实现了多态,虚函数的实现利用了继承
B:✔
C:虚函数需要先去虚表中找到函数地址再进行调用,与编译期间就确定地址的静态函数相比,效率较低。✔
D:必须借助父类指针 / 引用 ✔
A,B,C说法都没问题
D:覆盖也叫重写,函数必须是相同函数名,并且参数个数和类型都相同,题目说法❌
多态的条件之一:父类的指针或引用去调用,所以引用可以作为产生多态效果的手段!
子类对象 赋值给基类对象 / 基类引用 / 基类的指针是可以发生的,也叫做切片,即指向父类的那一部分。选项B说法是错误的
但是基类对象如果要赋值给子类对象引用,可以通过强制类型转换来实现,但是通过强制类型转换是不安全的!只有父类的指针或引用是指向子类对象的时候,这时候再赋值给子类对象的指针或引用 才是安全的。
所以最终答案为 ABBA
代码:
#include
#include
using namespace std;
int findIndex(int n)
{
//初始化二维数组
vector<vector<int>> vv(n,vector<int>(2*n-1,0));
//设置第一列和最后一列有效数为1
for(size_t i = 0;i<n;++i)
{
vv[i][0]=1; //第一列
vv[i][2*i]=1; //最后一列
}
//遍历赋值每一个位置
for(size_t i = 0;i<n;++i)
{
//第一列和最后一列不用赋值
for(size_t j = 1;j<2*i;++j)
{
//如果是第二列,只需要加上一行的两个数
if(j==2)
{
vv[i][j] = vv[i-1][j]+vv[i-1][j-1];
}
else
{
vv[i][j] = vv[i-1][j-2]+vv[i-1][j-1]+vv[i-1][j];
}
}
}
//遍历最后一行
for(size_t i=0;i<2*n;++i)
{
if(vv[n-1][i]%2==0 && vv[n-1][i]!=0)
{
return i+1;
}
}
return -1;
}
int main()
{
int n;
while(cin>>n)
{
int odd = findIndex(n);
cout << odd << endl;
}
return 0;
}
但是这一提交,发现内存超额!说明程序还有其他的完善空间
#include
using namespace std;
int main()
{
int n;
static int arr[] = {2,3,2,4};
while(cin>>n){
if(n<3){
cout << -1 << endl;
}
else{
cout << arr[(n-3)%4]<<endl;
}
}
return 0;
}
#include
#include
using namespace std;
int main(){
string str;
char ch;
getline(cin,str);
cin >> ch;
int count=0;
for(auto& i : str)
{
//如果ch不是字母:看ch和i是否相等
//如果ch是字母,ch和i可能是大小写字母,或者同为大写或小写
if(ch==i || (isalpha(ch) && isalpha(i)&&(ch==i || ch==i+32 || ch+32==i))){
count ++;
}
}
cout << count <<endl;
return 0;
}