2022暑期复习-Day9

选择题

Q1 下面代码的输出结果是( )。

class CParent
{
public: virtual void Intro()
{
    printf("I'm a Parent, "); Hobby();
} 
      virtual void Hobby()
{
    printf("I like football!");
}
};
class CChild : public CParent {
public: virtual void Intro()
{
    printf("I'm a Child, "); Hobby();
}
virtual void Hobby()
{
    printf("I like basketball!\n");
}
};
int main( void )
{
CChild *pChild = new CChild();
CParent *pParent = (CParent *) pChild;
pParent->Intro();
return 0;
}

A: I’m a Parent, I like football!
B: I’m a Parent, I like basketball!
C: I’m a Child, I like basketball!
D: I’m a Child, I like football!

涉及到多态知识点。
父类指针指向子类。虚函数表不会被影响,所以父类指针调用的函数一直是虚函数,去vptr指向的虚函数表中找到函数指针,然后创建函数栈每调用函数,调用的都是子类重写的虚函数

答案:C

Q2 若 char 是 1 字节, int 是 4 字节,指针类型是 4 字节,代码如下:

class CTest
{
public:
CTest():m_chData('\0'),m_nData(0)
{ } 
virtual void mem_fun(){}
private:
char m_chData;
int m_nData;
static char s_chData;
};
char CTest::s_chData='\0';

A: 16 4
B: 16 10
C: 12 9
D: 10 10

对于类中的静态成员是不会计入大小计算的,因为所有类就只有这一个静态变量。
对于有虚函数的类中,需要考虑vfptr虚函数表指针,这个指针放在第一个内存的位置。

根据内存对其的规则计算,
在这里插入图片描述

答案:C

Q3 下面关于虚函数和函数重载的叙述不正确的是()。

A: 虚函数不是类的成员函数
B: 虚函数实现了C++的多态性
C: 函数重载允许非成员函数,而虚函数则不行
D: 函数重载的调用根据参数的个数、序列来确定,而虚函数依据对象确定

由动态的多态-基类指针或引用调用派生类的虚函数
静态的多态-函数重载
概念可知
虚函数必须是类的成员函数

答案:A

Q4 对于一个频繁使用的短小函数,在C语言中用宏实现,在C++中应用( )实现。

A: 虚函数
B: 内联函数
C: 友元
D: 抽象类

inline 返回值 函数名 参数列表
{函数体}
在编译时,就会自动检查,放入代码中,这样也会导致生成的文件变大,所以要求使用短小的函数

有一个注意点,内联函数,不能调用递归函数。

答案:B

Q5 下面有关虚函数和非虚函数的区别说法错误的是( )。

A: 子类的指针访问虚函数访问的是子类的方法
B: 子类的指针访问非虚函数访问的是子类的方法
C: 父类的指针访问虚函数访问的是父类的方法
D: 父类的指针访问非虚函数访问的是父类的方法

这是多态的概念:父类指针访问的是谁的方法取决于父类指针指向的是什么对象,因为指向的什么对象提供了访问的_vfptr,这才是决定父类指针访问的虚函数是谁的。

答案: C

编程题

比较简单

Q6

在这里插入图片描述
直接使用下标索引,来确定每个字符在第几行,就不用使用函数或者遍历查找,快捷方便。

class Solution {
public:
    string index = "12210111011122000010020202";
    vector<string> findWords(vector<string>& words) {
        //先建立一个元素判断表
        int flag;
        vector<string> ret;
        for(int i =0 ;i < words.size(); i++)
        {
            flag = -1;
            
            for(int j = 0; j < words[i].size();j++)
            {
                
                char tmp = islower(words[i][j])?words[i][j]:words[i][j] + 32;
                
                int row = index[tmp - 'a'] - '0';
                if(flag==-1)
                {
                    flag = row;
                }
                else if(flag!= row)
                {
                    flag = -1;
                    break;
                }
            }
            if(flag!=-1)
            {
                ret.push_back(words[i]);
            }
        }  
        return ret;

    }
};

Q7

在这里插入图片描述

class Solution {
public:
    int numJewelsInStones(string jewels, string stones) {
       
        int count = 0;
        for(int i = 0;i < stones.size();i++)
        {
            if(find(jewels.begin(),jewels.end(),stones[i])!=jewels.end())
            {
                count++;
            }
        }
        return count;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值