正文

C++小题,你敢挑战吗(晕死你)?(更新中)2006-12-27 22:14:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/yuqiexing/21534.html

分享到:

1. class B{ protected:  virtual void f( ) { cout << "B" << endl;} public:   void  g ( )  { f( ) ; } };   class  D : public  B{    protected :          void f( ) { cout << "D" << endl ; } }   int main () {       D   d;       d . g ( );      return  0; }   详细解答:既然是继承,g又没有覆盖,那么g就是同一个入口地址。而在调用f的时候,涉及到this指针。这个时候,this指针是基类指针。由于绑定了虚函数表,那么就会查询到实际上是指向派生类D的。于是得出结果。 这里如果把virtual去掉,那么直接进入基类的f()函数入口。 2. class A{public:       A( ) { a=0;}       void set_value(int x) { a=x;}       void print(){cout<<a;}private :       int a; }; class B:public A{public:           void print()   {        A::set_value(4);        A::print();   } }; void main(){   B b;    b.set_value(5);   b.print();} 详细解答:对于b的内存区,通过setvalue设置内存区中的成员a。然后通过A也是设置同一个内存区中的成员a为4,最后通过print输出。答案是4. 3.  #include "iostream.h"class A{public:      A( ) { a=0;}      void set_value(int x) { a=x;f( );}      void print( ){cout<<a;}      void f( ){cout<<a<<endl;}public : int a; };class B:public A{public:           void print()   {        A::set_value(4);        A::print();   }     void f(){cout<<a<<endl;}  };void main(){   B b;    b.set_value(5);   b.print();} 详细解答:这里b首先设置内存区的a为5,然后调用A::f,输出5。后来又设置为4,并进行输出。所以结果是5、4、4。 你敢挑战吗?留言哦

阅读(10064) | 评论(3)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册