2022暑期复习-Day9

Posted Booksort

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
    
;

以上是关于2022暑期复习-Day9的主要内容,如果未能解决你的问题,请参考以下文章

2022暑期复习-Day9

2022暑期复习-Day6

2022暑期复习-Day3

2022暑期复习-Day3

2022暑期复习-Day8

2022暑期复习-Day8