面试题

da_wuhan 2011-10-26 06:28:59
看代码回答下列问题:
class Graph
{
public:
Graph() { s_gCount++; }
~Graph() { s_gCount--;}
virtual int drawOut() = 0;
static int getTotalCount() { return s_gCount; }
protected:
int m_x;
int m_y;
static int s_gCount;
};
1)这个类能否使用,为什么
2)上述代码如有错误请指出
3)如果有一个Rectangle类公共继承该类,那么s_gCount对Rectangle的成员属性是什么?
4)对Graph及其子类的计数是否有效,如果无效应该采取什么措施?
5)请画出该类的内存布局结构示意图,如有修正,请只画出修正后的


B: ostream& operator<<(ostream& os,const A& a){
os<<a.data;
在运算符重载的前提下 os 是一个对象么?? 是不是相对于 cout

跪求各位前辈解答!!!!!!!
...全文
253 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
不二星空 2011-10-28
  • 打赏
  • 举报
回复
1)这个类能否使用,为什么
不能,该类拥有纯虚函数,该类为抽象类,不可实例化

2)上述代码如有错误请指出
眼拙没看到。。
3)如果有一个Rectangle类公共继承该类,那么s_gCount对Rectangle的成员属性是什么?
public继承,对成员的属性没有改变,所以还是protect
4)对Graph及其子类的计数是否有效,如果无效应该采取什么措施?
我觉得有效,不过最好在类外初始化一下
5)请画出该类的内存布局结构示意图,如有修正,请只画出修正后的
- -。。。

B: ostream& operator<<(ostream& os,const A& a){
os<<a.data;
在运算符重载的前提下 os 是一个对象么?? 是不是相对于 cout



看来我面试过不了。。
cjr2011 2011-10-27
  • 打赏
  • 举报
回复
1.virtual int drawOut() = 0;是一个纯虚函数,说明该类似一个抽象基类,只能被继承。
2.首先,构造函数和虚构函数不能定义为public;
其次,static数据成员应该在类的外部定义且需要初始化;
3.public方式继承的话保留基类的访问权限,故为protected
4.无效,即使是派生类也是一样。
5.不难,只是要注意static类型的成员不属于类,所以无需画出了。
B:重载<<,一个参数是对ostream对象的引用,在os是产生输出,作用相当于没重载前段cout。

自己的解答,欢迎讨论。
yaningfan 2011-10-27
  • 打赏
  • 举报
回复
上面有个地方写错了:改成为下面的

cout<<"rect2调用getTotalCount值:"<<rect2.getTotalCount()<<endl;
yaningfan 2011-10-27
  • 打赏
  • 举报
回复

class Graph
{
public:
Graph(){ s_gCount++; }
~Graph() { s_gCount--;}
virtual int drawOut() = 0;
static int getTotalCount() { return s_gCount; }
protected:
int m_x;
int m_y;
static int s_gCount;
};

int Graph::s_gCount = 0;

class Rectangel : public Graph
{
public:
int drawOut()
{
cout<<"实现drawOut"<<endl;
return 0;
}
};

int _tmain(int argc, _TCHAR* argv[])
{
if(1)
{
cout<<"构造Rectangel对象:rect1"<<endl;
Rectangel rect1;
cout<<"rect1调用getTotalCount值:"<<rect1.getTotalCount()<<endl;

cout<<"构造Rectangel对象:rect2"<<endl;
Rectangel rect2;
cout<<"rect1调用getTotalCount值:"<<rect1.getTotalCount()<<endl;
cout<<"rect2调用getTotalCount值:"<<rect1.getTotalCount()<<endl;
}
cout<<"rect1和rect2对象的生命期结束"<<endl;
cout<<"构造Rectangel对象:rect3"<<endl;
Rectangel rect3;
cout<<"rect3调用getTotalCount值:"<<rect3.getTotalCount()<<endl;

return 0;
}

运行结果:构造Rectangel对象:rect1
rect1调用getTotalCount值:1
构造Rectangel对象:rect2
rect1调用getTotalCount值:2
rect2调用getTotalCount值:2
rect1和rect2对象的生命期结束
构造Rectangel对象:rect3
rect3调用getTotalCount值:1
请按任意键继续. . .
今晚又失眠 2011-10-27
  • 打赏
  • 举报
回复
过来学习
玉树淋疯 2011-10-27
  • 打赏
  • 举报
回复
学习学习
like_chc 2011-10-26
  • 打赏
  • 举报
回复
学习学习!
TearyWang 2011-10-26
  • 打赏
  • 举报
回复
1. 不能,因为drawOut() = 0; 是虚函数。
2. 有错,static int getTotalCount() { return s_gCount; } static函数不能访问非static成员。
3. protected
4. 无效,每一个Graph只会被构造一次,也只被析构一次,在对象的生存期只s_gCount只为1,将s_gCount成员使用static声明。
5. 贴不了图。

B,是。不明白什么是相对于。

16,551

社区成员

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

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

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