几个笔试题

昨天笔试的巨人的几道题,回来查了下,有些的确写错了,挂不得没有下文,基本功不行啊,这里整理了几个题,有些是自己的答案,有些是不会的网上找到的

1,一个空的类中存在多个少默认的函数?

一个空的类存在5个默认的函数

包括一个默认的构造函数,默认拷贝构造函数,析构函数,=号赋值运算符和取址运算符

class EmptyClass

{

public :

EmptyClass() ; // 默认构造函数 空的构造,带参数的自己完成

EmptyClass(const EmptyClass &) ; // 拷贝构造函数 浅拷贝 深拷贝的需要自己实现

~EmptyClass() ;  // 一个空的析构函数   如果类中没有分配空间一类的可以使用默认析构,否则要自己实现析构

Empty& operator=(const Empty&) ; // 赋值运算符 这个一般也是用默认的,但是如果类比较负责一般要自己写一个

Empty* operator&() ; //取址运算符 ,这个一般都是用默认的

};

 

2,使用编译器编译源码需要哪几个步骤?联合编译

GCC编译C源码有四个步骤:

预处理-----> 编译 ----> 汇编 ----> 链接

现在我们就用GCC的命令选项来逐个剖析GCC过程。

1)预处理(Pre-processing)

在该阶段,编译器将C源代码中的包含的头文件如stdio.h编译进来,用户可以使用gcc的选项”-E”进行查看。

2)编译阶段(Compiling)

第二步进行的是编译阶段,在这个阶段中,Gcc首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,Gcc把代码翻译成汇编语言。用户可以使用”-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。

3)汇编阶段(Assembling)

汇编阶段是把编译阶段生成的”.s”文件转成二进制目标代码.

选项 -c

4)链接阶段(Link)

在成功编译之后,就进入了链接阶段。

无选项链接

用法:[root]# gcc hello.o –o hello.exe

作用:将编译输出文件hello.o链接成最终可执行文件hello.exe。

[root]# ls

hello.c hello.exe hello.i hello.o hello.s

 

运行该可执行文件,出现正确的结果如下。

[root@localhost Gcc]# ./hello

Hello World!

 

3,使用C++实现一个单例模式  设计模式不懂啊,没有怎么去接触,后悔了。

单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。

单例模式的要点有以下三个

一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。

网上找到的一个示例代码:

class Singleton
{
public:
  ~Singleton(){}
  static Singleton& Instance(){return instance_;}
  // testing member

protected:
  Singleton(){}  
  Singleton(const Singleton&);
  Singleton& operator=(const Singleton&);

private:
  static Singleton instance_;
};
Singleton Singleton::instance_;

 

4,使用memset(this,0,sizeof(*this))来初始化类时会出现的问题?

自己感觉会有两个问题,

一个是sizeof的问题,sizeof计算类的空间时不计算static类型的静态成员变量的大小,如果类中存在static类型,则分配时将忽略static变量的大小。

二是虚函数指针的问题,如果类中存在虚函数,则类中会保存一个指向虚函数表的指针,如果使用memset进行初始化,会让该指针变为NULL指针,也就是无法找到虚函数表,直接导致使用虚函数时出现错误。


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值