class A { public: A() {} (virtual) void print() { cout << "This is A." << endl; } }; class B : public A { public: B() {} void print() { cout << "This is B." << endl; } }; int main(int argc, char* argv[]) { B b; A a; a = b;a.print; return 0; }
那么这里输出的是This is B,若是把virtual去掉,那么输出This is A,加上virtual ,多态了,B中的print被调用了,也就是能够实现父类使用子类的方法。html
多态性使得可以利用同一类(基类)类型的指针来引用不一样类的对象,以及根据所引用对象的不一样,以不一样的方式执行相同的操做。把不一样的子类对象都看成父类来看,能够屏蔽不一样子类对象之间的差别,写出通用的代码,作出通用的编程,以适应需求的不断变化。赋值以后,父对象就能够根据当前赋值给它的子对象的特性以不一样的方式运做(也就是能够调用子对象中对父对象的相关函数的改进方法)。前端
当编译器遇到virtual后,会为所在的类构造一个表和一个指针,那个表叫作vtbl,每一个类都有本身的vtbl,vtbl的做用就是保存本身类中虚函数的地址,咱们能够把vtbl形象地当作一个数组,这个数组的每一个元素存放的就是虚函数的地址.指针叫作vptr,指向那个表。而这个指针保存在相应的对象当中,也就是说只有建立了对象之后才能找到相应虚函数的地址。
java
注意node
(1)为确保运行时的多态定义的基类与派生类的虚函数不只函数名要相同,其返回值及参数都必须相同,不然即便加上了virtual,系统也不进行迟后联编。面试
(2) 虚函数关系经过继承关系自动传递给基类中同名的函数,也就是上例中若是A中print有virtual,那么 B中的print即便不加virtual,也被自动认为是虚函数。编程
(3) 没有继承关系,多态机制没有意义,继承必须是公有继承数组
(4)现实中,远不仅我举的这两个例子,可是大的原则都是我前面说到的“若是发现一个函数须要在派生类里有不一样的表现,那么它就应该是虚的”。这句话也能够反过来讲:“若是你发现基类提供了虚函数,那么你最好override它”。安全
2.代码的鲁棒性服务器
我当时回答了鲁棒性至关于代码的健壮性,可是以后扯到了扩展性,有点失策...网络
健壮性是指对于规范要求之外的输入可以判断出这个输入不符合规范要求,并能有合理的处理方式。健壮性就是鲁棒性,是指一个程序中对可能致使程序崩溃的各类状况都充分考虑到,而且做相应的处理,在程序遇到异常状况时还能正常工做,而不至于死机。
3.C与C++的区别
第一点就应该想到C是面向过程的语言,而C++是面向对象的语言,通常简历上第一条都是熟悉C/C++基本语法,了解C++面向对象思想,面向对象的三大特性:封装、继承、多态
第二点C和C++动态管理内存的方法不同,C是使用malloc/free函数,而C++除此以外还有new/delete关键字;
(malloc与free是C++/C 语言的标准库函数,new/delete 是C++的运算符,对于用户自定义的对象而言,用maloc/free没法知足动态管理对象的要求。对象在建立的同时要自动执行构造函数,对象在消亡以前要自动执行析构函数)
第三点C++的类是C所没有的,可是C中的struct是能够在C++中正常使用的
第四点C++支持函数重载,而C不支持函数重载
第五点C++中有引用,而C没有;这样就不得不提一下引用和指针的区别
指针是一个实体他在栈中有本身使用的空间,可是引用没有
引用必须初始化,指针不用可是最好初始化
引用只能初始化一次是个专注的人,指针不是
指针和地址运用自增(++)不一样,引用是值进行自增,而指针是地址进行自增
面试是下午一点半开始,进去先填写一个表格和作一份C++研发工程师题,题目都很基础,随意写了一下,题目中比较有新意的是有关于C++11的auto 以及lambda函数,还有就是关于斗地主中三个玩家和服务器之间的发牌、叫分、打牌的补充逻辑示意图,以后就是最后一道最喜欢哪一种类型的游戏以及相应的理由。
技术面,面个人直接就是杭电毕业的学长,面试过程当中发现也一样是老乡,感受十分有缘,一开始就是自我介绍,我分别从学习上,科研竞赛上(本人读研期间作的事情真的挺多的,因此balabala了很久,可是面试官并无不耐烦),还有就是社会工做上来分点介绍本身(真的,思路要清晰,有条理,以后面试官也赞赏我能分点介绍),接着面试官提问关于项目中遇到的困难,怎么去解决,有哪些体现你的学习能力,我直接从我小白身份作过的项目里去介绍这几点,说完面试官很满意,全程笑脸,以后问我看技术书是怎么看的,我说不会从头看到尾,我会先看目录,找到本身项目中相关的信息,而后去作,以后看例子,有个类似的模板就嵌套进去,遇到不懂的再查,面试官也笑了笑,最后面试官就聊了聊该岗位具体要作什么,和我想的差很少,同时也须要作一些前端的事情,以后面试官商量了一下实习时间等,他就去找HR,说若是HR面过了就来实习
HR面,面个人是HR小姐姐,挺有意思的,也问了我项目,一样的回答,HR表示我思路很清晰,以后问了我人生规划以及是否留在杭州,本人表示愿意,而后就是问实习时间还有实习薪资,顿时内心有底了,毕竟并不是科班出身,以及本身提了几个问题,关于上班时间,公司规模,具体事物等,HR都一一回答了,聊的也很愉快。
总的来讲一次不错的面试经历。
网上笔试结束后,大概过来一星期通知去面试,那天下大雨,路上一个多小时的时间...还把雨伞弄丢了..好气
首先是基础面
1.先介绍本身学习方面(我说了一些本身的奖学金)
2.聊一聊项目经历,其中我说明了本身的SCI论文如何发表,在项目中本身作的事情,面试官答题了解了我作的事和在项目中的做用。
3.是否了解TCP/IP,不了解...
4.多线程,回答thread_create来建立多线程,VS上能够用opm.h头文件来进行多线程
以后技术面
1.自我介绍(我分三个方面:学习,科研和项目,社会工做)
2.迭代与递归的区别,递归会消耗更多内存和时间,迭代则不会
3.如何判断链表中是否有环,能够设置两个快慢指针,快指针向前走两步,慢指针向前走一步,若是两个指针相遇,那么该链表中存在环(追击问题)
4.多线程编写,线程切换
用thread_creat建立多线程,sleep用于线程睡眠,SwitchToThread用于线程切换。
5.是否会快速排序,快速排序的思想,可否将快排的递归转换成迭代
快排采用分治法,分而治之,递归转迭代并不会...
6.字符串中找子串如何实现
strstr()函数,我回答使用动态规划,寻找子结构。
7.用过哪些IDE
code::block,eclipse,VS
8.是否了解过智能指针
auto_ptr,使用完毕能够自动销毁内存。
9.是否作过GUI界面
作过GUI界面,可是是用matlab作的。
最后就是HR面,HR小姐姐挺漂亮的
1.自我介绍(学习方面)
2.学习期间最有成就感的事
发表sci论文
3.最可惜的事
和女友分手
4.大华是不是你心中的理想公司
吹了一波
5.实习日期,一周几天等