实习 - 纪念第一次被腾讯虐

来源:互联网 发布:mac如何下载阿里旺旺 编辑:程序博客网 时间:2024/06/05 07:21

  实习专题的第一篇,就是参加腾讯模拟笔试。说是笔试,其实也是要用电脑在线考试的。然而,久疏C++的我,果不其然被虐。而且是被两道C++题目虐。选择题有一道,考到了析构函数和虚函数,而且还加上了指针的知识……还有一道是大数乘法,然而我花了半个小时依然没有打完。痛定思痛,还是先总结一下犯错的知识点:
一、虚函数
  在类继承的时候,函数是可以重载的,如果用一般的方法,调用基类的函数还是子类的构造函数取决于对象的类型,而用virtual function的话,则取决于指针的类型。
  看了这句话,应该可以知道下面的程序输出的结果是什么了:

// Virtual.cpp#include <iostream>using namespace std;// 测试虚函数的用法struct A{    virtual void foo() {        cout << "A_foo" << endl;    }    void boo(){        cout << "A_boo" << endl;    }};struct B : A{    virtual void foo() {        cout << "B_foo" << endl;    }    void boo(){        cout << "B_boo" << endl;    }};int main() {    A a;    B b;    A *pa = &a;    pa->foo();    pa->boo();    pa = &b;    pa->foo();    pa->boo();    return 0;}

  虚函数解决了什么问题呢?如果基类有很多继承类,而且不使用虚函数,那么通过子类对象想访问基类的函数是不行的(就像两个pa->boo()都输出A_boo一样,对象是A*没有变,所以输出也不变),必须另外声明基类对象才可以,很麻烦。而使用虚函数则可以让基类指针指向子类,这样这个指针就可以访问基类的虚函数。如果你像调用子类的函数,那么再定义一个子类的指针就可以了
  最后说明一个细节:子类不需要再在函数前面加上virtual了,但是加上的话比较整体,规范一些。
  参考网址:什么是C++虚函数、虚函数的作用和使用方法
  
二、大数乘法

0 0
原创粉丝点击