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产生的大块内存 栈上存放的是程序运行的 ...
随机推荐
- 前端见微知著AngularJS备忘篇:温故而知新,可以为师矣
话说以前JQuery刚出来的时候,真的是对个人的冲击蛮大的.记得当时我买的第一本书就是<锋利的JQuery>,藉由这本书开始,我从此以后的项目基本用上了JQuery,其给我带来的便利性是不 ...
- 802.11 对于multicast 和 broadcast的处理
ethernet内部会有broadcast 和 multicast.这两种包都是一个STA向多个STA发包. 当没有wifi存在的时候,LAN口之间的broadcast 和 multicast是可靠转 ...
- 继续node爬虫 — 百行代码自制自动AC机器人日解千题攻占HDOJ
前言 不说话,先猛戳 Ranklist 看我排名. 这是用 node 自动刷题大概半天的 "战绩",本文就来为大家简单讲解下如何用 node 做一个 "自动AC机&quo ...
- Unity 5.3.1 No Android/IOS module loaded
unity我一直在用5.0以下的版本 昨天升级到了最新版本5.3.1 发现无法打android包,ios也不行 提示“No Android/IOS module loaded” 下面有个Module ...
- Scala集合操作
大数据技术是数据的集合以及对数据集合的操作技术的统称,具体来说: 1.数据集合:会涉及数据的搜集.存储等,搜集会有很多技术,存储技术现在比较经典方案是使用Hadoop,不过也很多方案采用Kafka. ...
- ASP.NET Web API 实现客户端Basic(基本)认证 之简单实现
优点是逻辑简单明了.设置简单. 缺点显而易见,即使是BASE64后也是可见的明文,很容易被破解.非法利用,使用HTTPS是一个解决方案. 还有就是HTTP是无状态的,同一客户端每次都需要验证. 实现: ...
- SharePoint 读取 Site Columns 的数据并绑定到DropdownList
public void GetSiteColumns(DropDownList ddl, String siteColumn) { var fields = new SPSite(ProjectCon ...
- java 时间操作
设置获取时间日期格式 // 设置日期格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); // 为 ...
- 解决 samba不允许一个用户使用一个以上用户名与一个服务器或共享资源的多重连接
net use * /del /y http://www.cnblogs.com/senior-engineer/p/4528378.html
- nginx正向代理,反向代理,透明代理(总结)
1正向代理 正向代理,也就是传说中的代理,他的工作原理就像一个跳板, 简单的说, 我是一个用户,我访问不了某网站,但是我能访问一个代理服务器 这个代理服务器呢,他能访问那个我不能访问的网站 于是我先连 ...