面试遇到的问题,征求答案

bhut 2004-11-26 11:48:34
构造函数可不可以是虚函数,为什么?
析构函数可不可以是虚函数,为什么?
构造函数没有返回值,怎么确定是否成功?
析构函数内为什么不能抛出异常?
类的成员函数作回调函数需要什么条件?
什么叫抽象对象类?有什么性质?(这个是不是抽象基类啊)
VERIFY和ASSERT有什么异同?
unsigned short fun(unsigned short key)
{
(key >> 4)%256;
return key;
}
fun(256)等于多少?

优化数据库有哪些方法?
还有在华为面试遇到的:当前软件业发展中遇到了什么困难?

以上都是凭记忆,可能描述不准确
...全文
510 45 打赏 收藏 转发到动态 举报
写回复
用AI写文章
45 条回复
切换为时间正序
请发表友善的回复…
发表回复
flybusflybus 2004-11-27
  • 打赏
  • 举报
回复
离完美的答案有很大距离
seeker_aroma 2004-11-27
  • 打赏
  • 举报
回复
yinzhaohui(一切努力)
同意你的程序解释
liuzq_78 2004-11-27
  • 打赏
  • 举报
回复
gggggzzzzz
linxy2002 2004-11-27
  • 打赏
  • 举报
回复
gz
Mr-Chen 2004-11-27
  • 打赏
  • 举报
回复
而实际c++的语法是不支持 虚构造函数 的

为什么没有虚构造函数?

虚调用是一种在可以在只有部分信息的情况下工作的机制。特别是允许我们调用一个只知道接口而不知道其准确的对象类型的函数。但要创建一个对象您需要全部的信息,特别是必须要知道对象的准确类型。因此,构造函数不能是虚的。
但仍然有可以间接实现像"虚构造函数"那样来创建对象的技术。例子参见TC++PL3 15.6.2.下面的例子就是一种使用抽象类来生成适当类型的对象的技术:
struct F { // 对象创建函数的接口
virtual A* make_an_A() const = 0;
virtual B* make_a_B() const = 0;
};
void user(const F& fac)
{
A* p = fac.make_an_A(); // 生成适当类型的对象A
B* q = fac.make_a_B(); // 生成适当类型的对象B
// ...
}
struct FX : F {
A* make_an_A() const { return new AX(); } // AX 从A继承而来
B* make_a_B() const { return new BX(); } // BX 从B继承而来
};
struct FY : F {
A* make_an_A() const { return new AY(); } // AY 从A继承而来
B* make_a_B() const { return new BY(); } // BY 从B继承而来
};
int main()
{
user(FX()); // 此用户生成了AX和BX
user(FY()); // 此用户生成了AY和BY
// ...
}
这个变化通常称作"the factory pattern"工厂模式。关键在于user()将比如AX和AY这样
的类信息完全隔离掉了。
Mr-Chen 2004-11-27
  • 打赏
  • 举报
回复
虚构造函数可以让你做一些 C++ 不直接支持的事情的用法
ddddh 2004-11-27
  • 打赏
  • 举报
回复
关于为什么构造函数不能为虚函数,我觉得是这样的。

为了实现虚函数功能,那么类的每个实例,必须含有一个vtbl(虚函数表)的指针,当调用某虚函数的时候,在vtbl中找到相应函数的指针,才能调用之。因此能调用虚函数的一个前提条件就是类的实例中已经有了指向vtbl的指针。但在构造函数执行之前,这个指针显然是没有初始化的。

所以,构造函数不能为虚.
linxy2002 2004-11-27
  • 打赏
  • 举报
回复
继续关注
SatanLi1982 2004-11-27
  • 打赏
  • 举报
回复
为什么构造函数不能虚拟?
这要看你的代码而言,不能一概而定,只要记住虚拟的非虚拟的区别就行了。
yingqing 2004-11-27
  • 打赏
  • 举报
回复
不 能 够 为 虚 拟函 数 , 测 试 成 功 在 函 数 内 部 写 输 出 函 数 count
mingzheng0609 2004-11-26
  • 打赏
  • 举报
回复
handwolf(初学者) 你没仔细审题呀^_^,return Key应该还是256
Mr-Chen 2004-11-26
  • 打赏
  • 举报
回复
1 构造函数可不可以是虚函数,为什么?
可以 虚构造函数
2 析构函数可不可以是虚函数,为什么?
可以 虚析构函数
3 构造函数没有返回值,怎么确定是否成功?
失败则抛出一个异常,或者使用一个内部状态位标识对象状态
4 析构函数内为什么不能抛出异常?
throw 会使栈被展开,因为在栈展开时,栈页面中的所有的局部对象会被析构,此时如果那些析构函数之一抛出异常,C++运行时系 统会无法判断该如何处理。
handwolf 2004-11-26
  • 打赏
  • 举报
回复
一时疏忽,惭愧!
cai12345 2004-11-26
  • 打赏
  • 举报
回复
我觉得显然fun(256)=256,key>>4并不会改变key值,这应该是常识阿
bhut 2004-11-26
  • 打赏
  • 举报
回复
第一个问题,我的回答:构造函数不能为虚是为了保证所有成员都正确初始化,因为可能有非虚的成员函数,他们可能需要构造函数的初始化值。对吗?
bigrobert 2004-11-26
  • 打赏
  • 举报
回复
析构函数可以是虚函数,而且当类中有虚成员函数时,析构函数必须采用虚函数。
bhut 2004-11-26
  • 打赏
  • 举报
回复
我怎么记得是:如果定义了虚函数,则析构函数必须为虚?
kyh1234567 2004-11-26
  • 打赏
  • 举报
回复
构造函数不可以是虚函数,析构函数不可以是虚函数。
fun(256) = 16
只知道这些
ding
blackboxboyb 2004-11-26
  • 打赏
  • 举报
回复
1构造函数 不能是虚构得
2析构函数 可以不是虚构得,但强烈推荐要虚构
3
4好像是涉及异常得处理,异常得处理是返回上一次调用得析构,如果连析构都抛异常,就没法处理了
5 静态?
6。。。
7。。
8。。。
morisecue 2004-11-26
  • 打赏
  • 举报
回复
fun(256)=256呀,key的值没有被修改
key=(key>>4)%256才能得到16的
-0x3c是哪儿来的?

加载更多回复(25)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧