有关C++面向对象面试题
2016-09-14 20:37
162 查看
题目一:下面代码的输出结果是:
解答: B::Fun with NUMBER 10。 虚函数动态绑定到B,但缺省实参是编译时候确定的10, 而非20
题目二:请问下面代码的输出结果是什么?
解答:
这里讲一个指向B类型的指针指向A类型的对象,由于函数print并不位于对象中,且Print是非虚函数,故执行静态绑定(若动态绑定,则需要vptr的信息,而对象a中不存在vptr信息,则会执行出错)。当调用Print函数时, 需要输出c的值,程序并不知道指针pb指向的对象不是B类型的对象,只是盲目地按照偏移去取,c在类B的对象中的偏移值跟a在类A的对象中的偏移值相等,故取到a的值1.
#include <iostream> using namespace std; class A{ public: virtual void Fun(int number = 10){ cout << "A::Fun with number" << number << endl; } }; class B : public A{ public: virtual void Fun(int number = 20){ cout << "B::Fun with number = " << number << endl; } }; int main() { B b; A &a = b; a.Fun(); return 0; }
解答: B::Fun with NUMBER 10。 虚函数动态绑定到B,但缺省实参是编译时候确定的10, 而非20
题目二:请问下面代码的输出结果是什么?
#include <iostream> using namespace std; class A{ public: A(){ a = 1; b = 2; } private: int a; int b; }; class B{ public: B(){ c = 3; } void print(){ cout << c; } private: int c; }; int main(int argc, char** argv[]){ A a; B *pb = (B*)(&a); pb->print(); return 0; }
解答:
这里讲一个指向B类型的指针指向A类型的对象,由于函数print并不位于对象中,且Print是非虚函数,故执行静态绑定(若动态绑定,则需要vptr的信息,而对象a中不存在vptr信息,则会执行出错)。当调用Print函数时, 需要输出c的值,程序并不知道指针pb指向的对象不是B类型的对象,只是盲目地按照偏移去取,c在类B的对象中的偏移值跟a在类A的对象中的偏移值相等,故取到a的值1.
相关文章推荐
- 与全局变量构造析构顺序有关的一道面试题(C++)
- 与全局变量构造析构顺序有关的一道面试题(C++)
- 与全局变量构造析构顺序有关的一道面试题(C++)
- 与全局变量构造析构顺序有关的一道面试题(C++)
- 与全局变量构造析构顺序有关的一道面试题(C++)
- 有关C/C++指针的经典面试题
- 有关C/C++指针的经典面试题
- 有关C/C++指针的经典面试题
- 与全局变量构造析构顺序有关的一道面试题(C++)
- 与全局变量构造析构顺序有关的一道面试题(C++)
- 与全局变量构造析构顺序有关的一道面试题(C++)
- [C++面试题]之面向对象
- 有关C/C++指针的经典面试题
- 与全局变量构造析构顺序有关的一道面试题(C++)
- 有关C/C++指针的经典面试题(转)
- 有关C/C++指针的经典面试题
- 与全局变量构造析构顺序有关的一道面试题(C++)
- 与全局变量构造析构顺序有关的一道面试题(C++)
- 与全局变量构造析构顺序有关的一道面试题(C++)
- [C++面试题]之面向对象