据说是EMC2007年的笔试题
写出一段c++程序的输出。主要考察重载、多态、继承
代码如下:
class A
{
public:
A(){ cout << "A:A" << endl; }
~A(){ cout << "A:~A" << endl; }
virtual void f1() { cout << "A:f1" << endl; }
void f2() { cout << "A:f2" << endl; }
};
class B: public A
{
public:
B(){ cout << "B:B" << endl; }
~B(){ cout << "B:~B" << endl; }
void f1() { cout << "B:f1" << endl; }
void f2() { cout << "B:f2" << endl; }
};
class C: public B
{
public:
C(){ cout << "C:C" << endl; }
~C(){ cout << "C:~C" << endl; }
void f1() { cout << "C:f1" << endl; }
void f2() { cout << "C:f2" << endl; }
};
int main()
{
{
C c; // A::A() B::B() C::C()
A *p = &c;
c.f1(); //C::f1()
c.f2(); //C::f2()
p->f1(); //C::f1()
p->f2(); //A::f2(),,此处容易错误,因为A:f2有virtual关键字,而B:f2没有,因此很容易认为应输出B:f2
p = new C(); //A::A() B::B() C::C()
delete p; //A::~A(),注意:析构函数不是virtual,因此析构的时候不会多态,此处最容易搞错
//注意:析构函数不是virtual,因此析构的时候不会多态
//C::~C() B::~B() A::~A(),此处的析构是因为局部对象c
}
system("PAUSE");
return 0;
}
https://blog.sciencenet.cn/blog-791354-738009.html
上一篇:
《C++ Primer》第十五章文本查询示例下一篇:
笔试题集锦