面试题(C++09:Autodesk)

网上收集的Autodesk面试题:
1. 在类的普通成员函数中调用虚函数,情况是怎么样的?     
  具体来说,问题如下:       
  在类的普通成员函数fun1中调用了本类中的虚函数vfun2。     如果在外部有该类的对象指针pobj,或者对象obj,或者应用robj;     
  a.     那么pobj-〉fun1();调用的是vfun2的虚函数(可能是派生类中的vfun2),还是说调用的是vfun2在本类中的定义?   
  b.     那么obj.fun1();调用的是vfun2的虚函数(可能是派生类中的vfun2),还是说调用的是vfun2在本类中的定义?    
  c.      那么robj.fun1();调用的是vfun2的虚函数(可能是派生类中的vfun2),还是说调用的是vfun2在本类中的定义?  
答:
如果调用虚函数的实体是这个类的, 那么应该调用本类中的定义。
对于虚函数来说,是根据所调用 的实体来动态确定所调用的函数定义的。
对于非虚函数来说,用指针调用时, 是根据指针类型确定调用函数的。
Test Example :

#include <iostream>
using namespace std;

class Base
{
      public:
             Base() { cout << "Base" << endl; }
             ~Base() { cout << "~Base" << endl; }
            
             virtual void func1() { cout << "func1 in Base" << endl; }
             void func3() {cout << "func3 in Base" << endl;}
};

class Derived : public Base
{
      public:
             Derived() : Base() {cout << "Derived" << endl;}
             ~Derived() { cout << "~Derived" << endl; }
            
             virtual void func1() { cout << "fun1 in Derived" << endl; }
            
             void func2() { func1(); }
            
             void func3() {cout << "func3 in Derived" << endl;}
};

class Derived2 : public Derived
{
public:
             Derived2() : Derived() {cout << "Derived2" << endl;}
             ~Derived2() { cout << "~Derived2" << endl; }
            
             virtual void func1() { cout << "fun1 in Derived2" << endl; }
            
             void func3() {cout << "func3 in Derived2" << endl;}     
};

int main()
{
//    Derived *pobj = new Derived(); // 1 step
    Derived *pobj = new Derived2(); // 2 step
    cout << "Pointer output" << endl;
    pobj->func2();
   
    Derived obj;
    cout << "Object output" << endl;
    obj.func2();
   
    Derived2 obj2;
//    Derived &robj = obj; // 1 step
    Derived &robj = obj2; // 2 step
    cout << "Reference ouput" << endl;
    robj.func2();
   
    cout << "test non-virutal function" << endl;
    Base *pBase = NULL;
    pBase = new Derived();
    pBase->func3(); // Output :func3 in Base
   
    pBase = new Derived2();
    pBase->func3(); // Output :func3 in Base
   
    getchar();
}

//

2. 成员变量初始化顺序,几个有依赖关系的成员变量要初始化
答:
a. 成员变量的初始化顺序只与变量在类中的声明顺序有关,与在构造函数中的初始化列表的顺序无关。
class Test
{
private :
int n1;
int n2;
public:
Test();
};
Test::Test() : n2(2), n1(1)
{};
当查看相关汇编代码时,就能看到正确的初始化顺序了。
因为成员变量的初始化次序是根据变量在内存中次序有关,而内存中的排列顺序早在编译期就根据变量的定义次序决定了.

从全局看,变量的初始化顺序就应该是:
a,基类的静态变量或全局变量
b,派生类的静态变量或全局变量
c,基类的成员变量
d,派生类的成员变量


3, 写一个双链表, 及常用操作(添加/删除)
转自了以下资源: http://hi.baidu.com/caijiamx/blog/item/4110288b46d317dbfc1f10a5.html
http://hi.baidu.com/chen3900/blog/item/8466e45d1060cb44fbf2c0c9.html
双向链表(Double Linked List)
     双(向)链表中有两条方向不同的链,即每个结点中除next域存放后继结点地址外,还增加一个指向其直接前趋的指针域prior。

注意:
     ①双链表由头指针head惟一确定的。
     ②带头结点的双链表的某些运算变得方便。
     ③将头结点和尾结点链接起来,为双(向)循环链表。

b、双向链表的结点结构和形式描述
①结点结构(见上图a)
     
②形式描述
    typedef struct dlistnode{
         DataType data;
         struct dlistnode *prior,*next;
      }DListNode;
    typedef DListNode *DLinkList;
    DLinkList head;

c、双向链表的前插和删除本结点操作
     由于双链表的对称性,在双链表能能方便地完成各种插入、删除操作。
①双链表的前插操作
    

    void DInsertBefore(DListNode *p,DataType x)
      {//在带头结点的双链表中,将值为x的新结点插入*p之前,设p≠NULL
        DListNode *s=malloc(sizeof(DListNode));//①
        s->data=x;//②
        s->prior=p->prior;//③
        s->next=p;//④
        p->prior->next=s;//⑤
        p->prior=s;//⑥
       }
②双链表上删除结点*p自身的操作
    

    void DDeleteNode(DListNode *p)
      {//在带头结点的双链表中,删除结点*p,设*p为非终端结点
          p->prior->next=p->next;//①
          p->next->prior=p->prior;//②
          free(p);//③
      }
注意:
     与单链表上的插入和删除操作不同的是,在双链表中插入和删除必须同时修改两个方向上的指针。
     上述两个算法的时间复杂度均为O(1)。

4. 写个is-a和has-a
class Car
{
};
class BMW : public Car
{
};
class Person
{
Car *oneCar;
};

5. struct vs. class区别:
a, 成员的默认访问属性: struct 是 public; class 是private;
b, 类的默认继承属性:struct 是 public; class 是 private;
c, class 可以作为泛型的类型的声明的关键字。struct 不能;

转载于:https://www.cnblogs.com/happylife/archive/2009/09/27/1575237.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381213.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sql共享功能目录无法更改_大企业数据库服务首选!AliSQL这几大企业级功能你不可不知...

MySQL代表了开源数据库的快速发展&#xff0c;从2004年前后的Wiki、WordPress等轻量级Web 2.0应用起步&#xff0c;到2010年阿里巴巴在电商及支付场景大规模使用MySQL数据库&#xff0c;再到2012年开始阿里云RDS for MySQL为成千上万家客户提供可靠的关系数据库服务&#xff0c…

linux制作成后台服务,把dotnetcore 控制台app设置成linux后台服务

1&#xff0c;新建service文件vimvim /etc/systemd/system/dotnetTest.serviceip内容[Unit]Descriptiondotnet consoleit[Service]ioWorkingDirectory/home/useeinfo/publishconsoleExecStart/usr/bin/dotnet /home/useeinfo/publish/ConsoleApp3.dlltestRestartalwaysserviceS…

linux中汇编语言指令li,汇编语言IMUL指令:有符号数乘法

IMUL(有符号数乘法)指令执行有符号整数乘法。与 MUL 指令不同&#xff0c;IMUL 会保留乘 积的符号&#xff0c;实现的方法是&#xff0c;将乘积低半部分的最高位符号扩展到高半部分。x86 指令集支持三种格式的 IMUL 指令&#xff1a;单操作数、双操作数和三操作数。单操作数格式…

递归下降语法分析器的构建_一文了解函数式查询优化器Spark SQL Catalyst

大数据技术与架构点击右侧关注&#xff0c;大数据开发领域最强公众号&#xff01;暴走大数据点击右侧关注&#xff0c;暴走大数据&#xff01;记录一下个人对sparkSql的catalyst这个函数式的可扩展的查询优化器的理解&#xff0c;目录如下&#xff1a;0. Overview1. Catalyst工…

面试英语自我介绍的常用词汇

面试英语自我介绍的常用词汇 面试英语自我介绍的常用词汇 Words & Expressions&范文 精华汇总贴 想 找一份满意的工作吗&#xff1f;面试中面对外国老板连珠炮似的提问&#xff0c;有没有觉得心慌意乱、无所适从&#xff1f;求职过程中面试尤为重要&#xff0c;回答问题…

被远程机器长时间无响应 (错误码:[308])_自动折叠式“Rollbot”为完全不受束缚的软机器人铺平了道路...

如今&#xff0c;大多数软机器人依靠外部电源和控制&#xff0c;使它们与车外系统连接或用硬件组装。现在&#xff0c;来自哈佛大学约翰保尔森工程与应用科学学院&#xff08;SEAS&#xff09;和加州理工学院的研究人员开发了受折纸结构启发的软机器人系统&#xff0c;可以根据…

kali linux编辑记事本,kali linux操作系统

最近在研究kali linux***操作系统&#xff0c;可能有许多人还不知道这个系统&#xff0c;但是&#xff0c;我可以告诉大家&#xff0c;你想成为电影***那样&#xff0c;这个操作系统能够帮助你实现Kali Linux 前身是著名***测试系统BackTrack &#xff0c;是一个基于 Debian 的…

如何系统地自学python~知乎_经验分享 | 如何系统地自学 Python?

是否非常想学好 Python&#xff0c;一方面被琐事纠缠&#xff0c;一直没能动手&#xff0c;另一方面&#xff0c;担心学习成本太高&#xff0c;心里默默敲着退堂鼓?幸运的是&#xff0c;Python 是一门初学者友好的编程语言&#xff0c;想要完全掌握它&#xff0c;你不必花上太…

飞信SDK内容【转载】

使用飞信SDK开发短信收发程序2008-10-13 13:57利用飞信的协议可以在线收发消息&#xff0c;或是向手机发送消息。由此&#xff0c;可以自己来完成一个IM工具。本文即是对飞信SDK的使用方法&#xff0c;及如何开发作一个说明。一、引用FetionSDK飞信是采用C#开发的&#xff0c;所…

linux中将光标与操作系统,linux操作系统基本命令介绍(2)

whoami 查看当前用户su - 用户名 切换用户的同时再切换用户空间创建工作组(注意&#xff1a;需要切换到root用户)groupadd 组名删除工作组groupdel 组名修改用户所在组usermod -g 用户名 组名添加用户账号useradd 用户名-d 指定用户登录系统时的主目录&#xff0c;如果不使用该…

vm磁盘映射 不能启动_Oracle的启动与关闭-数据库(4)

Oracle数据的库的启动与关闭&#xff0c;为了节约资源消耗&#xff0c;把我们用到的服务开启&#xff0c;这样对于项目开发也有好处。1 Oracle 启动Oracle 是通过系统的服务来启动的。图1. 找到计算机管理图2. 找到服务&#xff0c;点击图3. Oracle相关启动项图4. 如何关闭和启…

ASP.NET Session详解

原文 http://www.zxbc.cn/html/20090711/72153.html 当用户在 Web 应用程序中导航 ASP.NET 页时&#xff0c;ASP.NET 会话状态使您能够存储和检索用户的值。HTTP 是一种无状态协议。这意味着 Web 服务器会将针对页面的每个 HTTP 请求作为独立的请求进行处理。服务器不会保留以前…

python datetime.date 和数据库date_Python成为专业人士笔记-date 对象、time 对象及datetime用法深度剖析...

“专业人士笔记”系列目录&#xff1a;创帆云&#xff1a;Python成为专业人士笔记--强烈建议收藏&#xff01;每日持续更新&#xff01;​zhuanlan.zhihu.com将字符串解析为对应时区的datetime对象Python 3.2在将字符串解析为datetime对象时支持%z格式&#xff1a;import datet…

linux充当防火墙,Linux下主机充当防火墙的巧妙应用之iptables!.doc

Linux下主机充当防火墙的巧妙应用之iptables!Linux下主机充当防火墙的巧妙应用之iptables!实验综合拓扑图:注意事项&#xff1a;防火墙由Red Hat Linux 5.4 版本的机器充当&#xff0c;eth0 使用Host-only (vmware 1)&#xff0c;eth1 使用Bridge(本地连接),eth2(vmware 2)前期…

学习总结——实现生成excel表格(方法二)

本方法主要是利用了反射&#xff0c;具体代码如下&#xff1a;Codepublic static int ExportTohtmlExcel__dksq_view(string strsql) { //贷款申请信息获得 BLLibrary.BView_jbxx_dksq viewdal new BView_jbxx_dksq(); IList<View…

linux svn cleanup 用法,SVN命令之清理命令(clean up)的功能及使用技巧

SVN的清理命令&#xff0c;我们经常会使用。这个命令的原理&#xff0c;我们还是有必要深究一下的。当SVN改变你的工作拷贝(或是.svn中的任何信息)&#xff0c;它会尽可能的小心。在进行任何修改操作时&#xff0c;SVN都会把日志记录到日志文件中&#xff0c;然后执行log文件中…

python string转int_我用Python搞资源 [ 02 ]

这不是教程&#xff0c;所以没有基础的你看不懂也很正常&#xff0c;去后面点个赞就好。一. 目标链接上一个推送处理了一个不带密码的蓝奏云分享链接&#xff0c;这回处理一下带密码的分享链接。https://lanzoux.com/b015ybdmh 密码:9n8z为了能有一个合适的链接来练手&…

c语言数字字体的格式,c语言—— 格式控制符—— 数据类型——相对应的字节数...

这是转义scanf("%lf", &r);枚举类型&#xff1a;https://www.cnblogs.com/bhlsheji/p/5204541.htmlANSI C标准基本类型的字长与范围基本类型 字长 范围char(字符型) 1字节 -128~127int(整型) 2字节 -32768~32767float(单精度浮点型) 4字节 约精确到6位数double(双…

电子设计大赛作品_第十四届电子设计大赛圆满结束!

为了激发学生的创造性&#xff0c;加强学生动手能力的培养和工程实践的训练&#xff0c;提高学生针对实际问题进行电子设计制作的综合能力&#xff0c;我院于2020年11月6号下午12点50分举行“安阳工学院第十四届电子设计大赛决赛”。1本次比赛由12组热爱电子设计的同学组成。由…

向左滚动,每次滚动的长度可以设置,然后暂停后继续滚动

支持FF等所有浏览器 向左滚动&#xff0c;每次滚动的长度可以设置&#xff0c;然后暂停后继续滚动 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd"> <HTML>&l…