阿里吧吧的C++面试题

bianhao06 2009-09-23 09:02:42
1.struct A{
void fun1()
{cout<<"1";}
}
struct B:public A{
void fun2(A *a)
{cout<<"2";}
}
void main()
{
A a;
B *b=static_cast<B*>(a);
b->fun2(&a);
cout<<3<<endl;
}
2.struct A{
void fun1()
{cout<<"1";}
}
struct B:public A{
void fun2(A *a)
{cout<<"2";}
}
void main()
{
A a;
B *b=dynamic_cast<B*>(a);
b->fun2(&a);
cout<<3<<endl;
}
3.struct A{
virtual void fun1()
{cout<<"1";}
}
struct B:public A{
virtual void fun2(A *a)
{cout<<"2";}
}
void main()
{
A a;
B *b=static_cast<B*>(a);
b->fun2(&a);
cout<<3<<endl;
}
4.struct A{
virtual void fun1()
{cout<<"1";}
}
struct B:public A{
virtual void fun2(A *a)
{cout<<"2";}
}
void main()
{
A a;
B *b=dynamic_cast<B*>(a);
b->fun2(&a);
cout<<3<<endl;
}
第一道题大概是这样的,主要要说出这四段代码的运行结果,是编译出错还是运行错误还是输出数字,最后一个是输出3,但是也不是很明白,我也大概记得主要的代码是这个样子。
请前辈解释下 输出结果 和原因
还有一个题目是这个样子的
char * p1;
void main
{
char a[100];
char *p2 = (char *)malloc(1000000);
p1=(char *)malloc(1000000);
}
问题是问我以上3个东西的内存分配在哪里, 我回答p1在全局数据区 其他都在栈中。
后面一个问题说程序导致栈溢出,最有可能是那句出错了。我也不是很明白这个!!请指点一下。


...全文
681 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
Steven_0610 2009-09-25
  • 打赏
  • 举报
回复
学习
bianhao06 2009-09-24
  • 打赏
  • 举报
回复
第四个也是运行时错误!!不知道是什么原因!
piaomiaoju 2009-09-24
  • 打赏
  • 举报
回复
mark
wbgxx 2009-09-24
  • 打赏
  • 举报
回复
ding ding
bianhao06 2009-09-24
  • 打赏
  • 举报
回复
hairetz 大哥 谢谢你的解答前面3个我看明白了 自己也理解了一下,但是第四个是什么意思!!
TianYiXiang 2009-09-24
  • 打赏
  • 举报
回复
A a;
B *b=operator_cast <B*>(a);
//这样的转换都不能转换的吧!
  • 打赏
  • 举报
回复
第一题去掉一些;以及&这些基本的语法错误之后,结果是23.

因为static_cast是强制转换,不做类型检测。
而函数是在类声明的时候就存在。之后fun2不是虚函数,则转换后,可以通过B*对象来调用。

第2题dynamic_cast会出错

第3题会报错,虽然static_cast成功了,但是fun1,fun2都是虚函数,是动态绑定,b对象调的函数,还是在A声明里查找,找不到fun2函数。
bianhao06 2009-09-24
  • 打赏
  • 举报
回复
4楼的 大哥能不能解释一下你怎么得出的第一题的答案??最后一个程序是输出3的,这个是面试官告诉我的!!
hyram 2009-09-24
  • 打赏
  • 举报
回复
学习
forster 2009-09-24
  • 打赏
  • 举报
回复
1 运行结果23
2 编译错
3,4 运行错

1 没问题 call函数直接call的fun2绝对地址
2 没虚函数 不能用dynamic_cast
3 通过A对象的虚函数表来找B的fun2的函数地址 肯定错
4 B *b=dynamic_cast<B*>(&a);失败 b为NULL 空指针

原理是是这样的 不知道用规则的术语咋说
love_route 2009-09-24
  • 打赏
  • 举报
回复
第四个错误原因是因为在struct A中没有fun2()函数的声明,当然找不到fun2()函数了
如果将struct A中的func1改为func2 则就不会出错了

[Quote=引用 13 楼 bianhao06 的回复:]
第四个也是运行时错误!!不知道是什么原因!
[/Quote]
24K純帥 2009-09-24
  • 打赏
  • 举报
回复
哎,我还纠结要不要投阿里巴巴
ljz888666555 2009-09-24
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 bianhao06 的回复:]
第四个也是运行时错误!!不知道是什么原因!
[/Quote]

class B {virtual void f();};
class D : public B {virtual void f();};

void f() {
B* pb = new D; // unclear but ok
B* pb2 = new B;

D* pd = dynamic_cast<D*>(pb); // ok: pb actually points to a D
D* pd2 = dynamic_cast<D*>(pb2); // pb2 points to a B not a D
}
bianhao06 2009-09-24
  • 打赏
  • 举报
回复
第二个是语法错误,因为动态强制类型转换参数必须是多态类型,而第四个运行错误是因为动态绑定的关系,所以和第三个一样 找不到要调用的函数fun2()。我这样理解吧!

samsinx 2009-09-24
  • 打赏
  • 举报
回复
1,output:23
2,syntax error, so cause compilation error
3,4 running error

---
p1: program's data segment.
a[],p2: current stack frame.
zgjxwl 2009-09-23
  • 打赏
  • 举报
回复
p1在全局数据区
a和p2在栈区

malloc的再堆上
zgjxwl 2009-09-23
  • 打赏
  • 举报
回复
char * p1; 
void main()
{
char a[100];
char *p2 = (char *)malloc(1000000);
p1=(char *)malloc(1000000);
}


这个会导致栈溢出?
cattycat 2009-09-23
  • 打赏
  • 举报
回复
上面4个只有1可以执行,2编译错误,3,4运行时错误。
第二个只有a分配在栈上,其他都在堆上。
zgjxwl 2009-09-23
  • 打赏
  • 举报
回复
1.
struct A
{
void fun1()
{
cout <<"1";
}
};
struct B:public A
{
void fun2(A *a)
{
cout <<"2";
}
};
void main()
{
A a;
B *b=static_cast <B*>(&a);
b->fun2(&a);
cout <<3 <<endl;
}

2.
struct A
{
void fun1()
{
cout <<"1";
}
};
struct B:public A
{
void fun2(A *a)
{
cout <<"2";
}
};
void main()
{
A a;
B *b=dynamic_cast <B*>(&a);
b->fun2(&a);
cout <<3 <<endl;
}

3.
struct A
{
virtual void fun1()
{
cout <<"1";
}
};
struct B:public A
{
virtual void fun2(A *a)
{
cout <<"2";
}
};
void main()
{
A a;
B *b=static_cast <B*>(&a);
b->fun2(&a);
cout <<3 <<endl;
}


4.
struct A
{
virtual void fun1()
{
cout <<"1";
}
};
struct B:public A
{
virtual void fun2(A *a)
{
cout <<"2";
}
};
void main()
{
A a;
B *b=dynamic_cast<B*>(&a);
b->fun2(&a);
cout <<3 <<endl;
}



排版放上来。。。应该是这样吧
quan123a 2009-09-23
  • 打赏
  • 举报
回复
第二个问题,a、p2在数据栈上,p1在全局数据,a导致栈溢出的可能性最大,因为其的内存分配在数据栈,p1、p2的内存分配在堆上
加载更多回复(1)
内容概要:本文提出了一种基于非合作博弈理论的居民负荷分层调度模型,并结合双层鲸鱼优化算法(Two-level Whale Optimization Algorithm)进行高效求解,模型与算法均通过Matlab代码实现。研究针对电力系统中居民侧用电负荷的复杂调度问题,引入非合作博弈机制刻画各用户之间的利益竞争关系,实现负荷的分层优化分配;同时设计双层优化架构,上层优化资源配置,下层模拟用户自主决策行为,提升了模型的实用性与合理性。通过智能优化算法求解多层级、非凸非线性的博弈模型,有效提高了调度方案的收敛性与全局寻优能力,适用于现代智能电网中的需求侧管理与能源优化场景。; 适合人群:具备电力系统基础理论知识和Matlab编程能力,从事智能电网、能源优化调度、需求侧管理、博弈论应用等方向的科研人员、高校研究生及工程技术人员。; 使用场景及目标:①应用于居民区电力负荷的分层优化调度系统设计与仿真分析;②为非合作博弈在多主体能源系统建模中的应用提供方法论支持;③利用双层鲸鱼算法解决具有嵌套结构的复杂双层优化问题,提升求解效率与调度方案的可行性。; 阅读建议:建议读者结合提供的Matlab代码深入理解模型构建逻辑与算法实现流程,重点关注博弈模型的效用函数设计、纳什均衡求解思路以及双层优化结构的迭代机制,宜配合实际用电数据开展复现实验以验证模型有效性与鲁棒性。
内容概要:本文围绕基于自适应神经模糊推理系统(ANFIS)智能控制器的可再生能源微电网功率管理系统展开研究,结合Simulink仿真实现,深入探讨了微电网中功率的智能调控与经济机组组合调度问题。通过引入ANFIS控制器,有效应对风能、光伏等可再生能源出力的波动性与不确定性,提升系统运行的稳定性与电能质量。研究内容涵盖微电网多源协调控制策略、功率平衡管理、优化调度模型构建及仿真验证,实现了对分布式电源、储能系统和负荷的协同优化,兼顾经济性与可靠性目标,并通过仿真平台验证了所提方法的有效性与优越性。; 适合人群:具备电力系统、自动化或新能源相关专业背景,熟悉Matlab/Simulink仿真环境,从事微电网能量管理、智能控制、能源优化等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于高比例可再生能源接入场景下的微电网能量管理系统研发与教学实践;②为实现微电网功率稳定控制与经济高效运行提供先进的智能控制解决方案;③支撑高水平学术论文复现、科研课题攻关及实际工程项目的仿真验证与方案优化。; 阅读建议:建议结合提供的Simulink模型与相关代码进行动手实践,重点关注ANFIS控制器的设计流程、规则库构建与参数调优方法,并通过与传统PID或MPC控制策略的对比实验,深入理解其在动态响应与鲁棒性方面的优势。同时可进一步拓展文中提出的优化调度逻辑,应用于多目标、多约束的复杂实际应用场景中。

70,038

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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