C++自问自答
因为:对虚函数的调用是通过虚指针+偏移地址构成,由于对虚函数的调用都是通过这种方式,所以对同一个虚函数的偏移值就必须相同。
2.为防止对象切片有什么办法?
可以将基类定义为纯虚类
3.为什么构造函数里面的虚机制不起作用?
a.如果构造函数调用层次上,中间构造函数调用的虚函数属于派生类,由于派生类为初始化完成,所以会有问题。
b.调用层次上的每一个构造函数,都会使虚指针指向该构造函数所属的类的虚表,而对象最终的虚指针是由最后调用的构造函数决定(辈分最小的类),如果在中间层次的构造函数调用虚函数,由于当前构造函数设置的虚指针是指向这个类的虚表,所以调用的虚函数还是自己的函数。
4.为什么纯虚析构函数必须有函数体?
因为,基类的析构函数总会被子类的析构函数调用,如果没有函数体,就不知道该怎么析构一个纯虚类。
5.如果一个派生类没有重定义基类的纯虚函数,会发生什么?
该派生类不能实例化。
6.为什么在析构函数中的虚机制不起作用。
因为虚函数归属的类可能已经被删除。
7.为什么在使用dynamic_cast时需要格外小心。
因为dynamic_cast用来做向下类型转换,操作结果不一定总是成功的,在失败的情况下返回的指针值是零,如果继续使用会coredump.
8.为什么对不带有虚函数的类层次执行向下类型转换,使用static_cast比dynamic_cast好
因为,dynamic_cast会使用虚表里面的类型信息,所以不合理,就算没有虚表,额外的调用会导致效率比较低。
9.为什么头文件的规则:不要把分配存储单元的东西放到头文件 ?
分配存储单元必须指定一个名字,二头文件会被多次包括,如果没有使用排重宏,则会造成多次定义的错误,另一方面就算是有排重宏,由于多个单元可见,怎么协调和同步访问该块存储也是一个问题。
10.c语言的setjump和longjump在c++中有什么问题?
a.保存点和返回点紧耦合
b.不会调用析构函数。试想如果析构函数里面有关闭文件,关闭网络连接,释放内存等操作。
11.c++的异常机制有什么好处?
将业务逻辑代码和错误处理代码解耦,使代码结构清晰,易理解。
12.为什么类型转换构造函数在异常处理机制中不工作?
????,也许是因为异常处理器需要的是更原始,更真实,更具体的信息,如果发生转换这些信息很可能打折扣。
13. catch(...)存在的意义是什么?
释放资源本层,配合不带参数的throw可以将异常完整的传递到上一级,上一级可以继续获取异常信息进行处理。
14.如果被抛出的异常对象,析构函数会抛出异常,会发生什么?
本层处理器将不会处理该异常,如果没有上一层处理器,则terminate会被调用;如果有上一层处理器,上层可以 捕获这个异常,但是这种情况被认为是糟糕的设计或编码。
15.如果构造函数里边会抛出异常应该怎么做,因为析构函数不会被调用?
a.可以在构造函数里边进行异常捕获用于释放资源!
b.也可以将需要释放资源的指针封装成对象,然后将这些对象作为成员变量放在类里面,因为成员变量是对象,所以会在构造函数之前调用其构造函数,所以如果这个时候抛出了异常那么栈反解的时候就会把已经成功构造的给释放掉。
{
T x;
istringstream inStr(str);
inStr>>x;
return x;
}
template <class T> string toString(const T & t)
{
ostringstream ostr;
ostr<<t;
return ostr.str();
{
istringstream iStrDoub(strDouble);
iStrDoub>>pre>>aft;
}
.png)
.png)
.png)
.png)
.png)
.png)
using namespace std;
//牛奶类
class Milk
{
public:
friend ostream & operator << (ostream & os,const Milk &)
{
return os<<"Milk";
}
};
//压缩牛奶类
class CondensedMilk
{
public:
friend ostream & operator << (ostream & os,const CondensedMilk &)
{
return os<<"CondensedMilk";
}
};
//蜂蜜类
class Honey
{
friend ostream & operator<<(ostream & os,const Honey &)
{
return os<<"Honey";
}
};
// 饼干类
class Cookies
{
friend ostream & operator<<(ostream & os,const Cookies &)
{
return os<<"Cookies";
}
};
//定义几个访客类
//熊类
class Bear
{
public:
friend ostream & operator<<(ostream & os,const Bear&)
{
return os<<"Big bear";
}
};
//小孩类
class Boy
{
public:
friend ostream & operator << (ostream & os ,const Boy &)
{
return os<<"Little boy";
}
};
//主要traits模板(空模板可以持有所有普通类型)
template <class Guest> class GuestTraits;
//特化的traits类
template<> class GuestTraits<Bear>
{
public:
typedef CondensedMilk beverage_type;
typedef Honey snack_type;
};
template<> class GuestTraits<Boy>
{
public:
typedef Milk beverage_type;
typedef Cookies snack_type;
};
class MixedUpTraits
{
public:
typedef Milk beverage_type;
typedef Honey snack_type;
};
//驱动类
template<class Guest,class traits=GuestTraits<Guest> >
class BearCorner
{
Guest theGuest;
typedef typename traits::beverage_type beverage_type;
typedef typename traits::snack_type snack_type;
beverage_type bev;
snack_type snack;
public:
BearCorner(const Guest & g):theGuest(g){}
void entertain()
{
cout<<"Entertaining "<<theGuest
<< " serving "<<bev
<< " and "<<snack<<endl;
}
};
int main(int argv,char ** args, char ** env)
{
Boy boy;
Bear bear;
BearCorner<Boy> bc1(boy);
bc1.entertain();
BearCorner<Bear> bc2(bear);
bc2.entertain();
BearCorner<Boy,MixedUpTraits> bc3(boy);
bc3.entertain();
return 0;
using namespace std;
template<class T>
class ObjCount
{
static int cnt;
public:
ObjCount(){++cnt;}
ObjCount(const ObjCount<T> & cnt){++cnt;}
~ObjCount(){--cnt;}
static int getCount(){return cnt;}
};
template<class T> int ObjCount<T>::cnt=0;
{
TestCnt1 t11,t12;
TestCnt2 t21,t22;
cout<<"TestCnt1::getCount="<<TestCnt1::getCount()<<endl;
cout<<"TestCnt2::getCount="<<TestCnt2::getCount()<<endl;
return 0;
C++自问自答的更多相关文章
- [python]自问自答:python -m参数?
python -m xxx.py 作用是:把xxx.py文件当做模块启动 但是我一直不明白当做模块启动到底有什么用.python xxx.py和python -m xxx.py有什么区别! 自问自答: ...
- 自问自答之VR遐想
先让我组织一下语言,作为表达能力超弱的战五渣来讲,归纳总结什么的最要命了. 我可以给你分析个1到N条出来,但是一般来讲没什么顺序,想到什么就说什么.而且我属于线性思维,有一个引子就可以按着话头一步步发 ...
- [python]自问自答:python -m参数? (转)
python -m xxx.py 作用是:把xxx.py文件当做模块启动但是我一直不明白当做模块启动到底有什么用.python xxx.py和python -m xxx.py有什么区别! 自问自答: ...
- [python]自问自答:python -m参数? (转) ( python2.7 版本 )
原文地址: http://www.cnblogs.com/xueweihan/p/5118222.html python -m xxx.py 作用是:把xxx.py文件当做模块启动 但是我一直不明白当 ...
- css自问自答(二)
css自问自答(二) 7.掌握定位的一些属性 position 和 display 属性,以及如何浮动(float)和清除(clear)元素,z-index属性 三个属性控制: position 属性 ...
- css自问自答(一)
css自问自答(一) 1.块级元素和行内元素特性与区别? 块级:display:block <div>.<p>.<h1>...<h6>.<ol&g ...
- vue 源码自问自答-响应式原理
vue 源码自问自答-响应式原理 最近看了 Vue 源码和源码分析类的文章,感觉明白了很多,但是仔细想想却说不出个所以然. 所以打算把自己掌握的知识,试着组织成自己的语言表达出来 不打算平铺直叙的写清 ...
- 区块链自问自答 day1
区块链自问自答 day1 简要介绍区块链是什么? 区块链(Blockchain)是一种对等网络下的分布式数据库系统 数据结构中的单向链表是通过每个节点包含一个节点的指针实现"链" ...
- 区块链自问自答 day2
区块链自问自答 day2 区块链的自治性是如何达成的?为什么能够在去信任的环境下自由安全地交换数据? 区块链中有众多的节点,包含了恶意节点.故障节点.正常节点,想要这些节点共同做出一致的决定就需要 ...
- golang 数组的一些自问自答
所有代码基于Go-1.17.一些研究Go数组的自问自答,可以考虑作为面试题. 问题:静态存储区是什么?和堆/栈有什么区别? 回答: 可以参考下列图 堆上存放new产生的大块内存 栈上存放的是程序运行的 ...
随机推荐
- js 数组去重
这是一道常见的面试题,最近在做[搜索历史记录]功能也用到,开始用了 indexOf 方法,该方法在 ECMA5才有支持,对于 IE8- 就不支持了. 我们可以自己写一个函数(Array对象的方法都是定 ...
- 在线音乐网站【03】Part one 功能实现
今天打算把网站功能的具体实现给总结一下,如果你想了解整个小项目,建议你先看看前面2篇博客. 1.在线音乐网站(1)需求和功能结构 2.在线音乐网站(2)数据库和开发环境 7.网站主要模块实现 a.在线 ...
- 【JavaScript】 闭包 我战战兢兢的接触了它
源:http://www.liaoxuefeng.com 1. 注意这里用了一个“创建一个匿名函数并立刻执行”的语法: (function (x) { return x * x; })(3); 理论上 ...
- C#利用iComparable接口实现List排序
List<T>类可以使用Sort()方法对元素排序. Sort()方法定义了几个重载方法,分别是 public void List<T>.Sort(),不带有任何参数的Sor ...
- Android下常见的四种对话框
摘要:在实际开发过程有时为了能够和用户进行很好的交互,需要使用到对话框,在Android中常用的对话框有四种:普通对话框.单选对话框.多选对话框.进度对话框. 一.普度对话框 public void ...
- 如何升级Ceph版本及注意事项
升级软件版本在日常运维中是一个常见操作. 本文分享一下Ceph版本升级的一些经验. 一般升级流程和注意如下: 1. 关注社区Release notes 和 ceph-user邮件订阅列表,获取社区发 ...
- 线性表的顺序存储结构C语言版
#include <stdio.h> #define MAXSIZE 101 #define N 10 typedef struct SeqList { int data[MAXSIZE] ...
- javaweb学习总结(四十二)——Filter(过滤器)学习
一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态 ...
- lightoj 1370 欧拉函数
A - Bi-shoe and Phi-shoe Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & % ...
- JavaScript结构三层——思想快速入门
本文版权归博客园和作者吴双本人所有,转载和爬虫请注明原文地址 http://www.cnblogs.com/tdws/,我是博客园蜗牛,我们共同进步. 今天讨论的是什么 如果你的工作中需要写Jav ...