一道关于C++派生类初始化的笔试题
2008-02-14 11:12
441 查看
最近看到这样一道笔试题,偶学习整理了一下,不到之处,希望各位指正。
问题: 下列程序的输出是什么?
#include <iostream>
using namespace std;
class A {
public:
A() {cout << "A" << endl;}
~A() {cout << "~A" << endl;}
};
class B {
public:
B() {cout << "B" << endl;}
~B() {cout << "~B" << endl;}
private:
A a;
};
class C: public A {
public:
C() {cout << "C" << endl;}
~C() {cout << "~C" << endl;}
private:
B b;
public:
A a;
};
int main() {
C *p = new C();
delete p;
return 0;
}
正确答案是:
下面是我的分析:
把握几个原则:
1)父类首先被初始化,初始化顺序与继承顺序相同。这里C继承A,所以要先初始化其父类A。
2)对象初始化时, 类成员变量的空间分配和初始化是在调用构造函数之前,无论是public的还是private的。
3)类成员变量的初始化顺序是由它们的声明顺序决定的,无论是public还是private的。
4)对象析构时,变量释放和析构函数的调用与初始化相反。
所以上面的打印结果分析如下:
A -- 父类class A 的构造函数打印出来
A -- 初始化class C的成员变量B b,B继承A,所以再次调用A的构造函数打印
B -- class C的成员变量调用自己的构造函数打印
A -- 初始化class C的成员变量A a,A的构造函数打印
C -- 最后才是C自己的构造函数打印
析构过程与上述顺序相反。
问题: 下列程序的输出是什么?
#include <iostream>
using namespace std;
class A {
public:
A() {cout << "A" << endl;}
~A() {cout << "~A" << endl;}
};
class B {
public:
B() {cout << "B" << endl;}
~B() {cout << "~B" << endl;}
private:
A a;
};
class C: public A {
public:
C() {cout << "C" << endl;}
~C() {cout << "~C" << endl;}
private:
B b;
public:
A a;
};
int main() {
C *p = new C();
delete p;
return 0;
}
正确答案是:
下面是我的分析:
把握几个原则:
1)父类首先被初始化,初始化顺序与继承顺序相同。这里C继承A,所以要先初始化其父类A。
2)对象初始化时, 类成员变量的空间分配和初始化是在调用构造函数之前,无论是public的还是private的。
3)类成员变量的初始化顺序是由它们的声明顺序决定的,无论是public还是private的。
4)对象析构时,变量释放和析构函数的调用与初始化相反。
所以上面的打印结果分析如下:
A -- 父类class A 的构造函数打印出来
A -- 初始化class C的成员变量B b,B继承A,所以再次调用A的构造函数打印
B -- class C的成员变量调用自己的构造函数打印
A -- 初始化class C的成员变量A a,A的构造函数打印
C -- 最后才是C自己的构造函数打印
析构过程与上述顺序相反。
相关文章推荐
- 一道简单的C++笔试题,关于抽象shape类求图形周长的问题~
- 一道关于java 类初始化 成员初始化的笔试题的解析
- 关于一道C++笔试题的纠结,学计算机的伤不起啊
- [笔试题 9][c/c++]关于成员变量,对象成员的初始化问题
- 展讯的一道笔试Java题(关于静态初始化问题)
- 一道关于C++ 继承/虚函数 笔试题 [转]
- 一道关于C++ 继承/虚函数 笔试题
- 一道关于C++ 继承/虚函数 笔试题
- 一道阿里巴巴笔试题中,关于java中的变量,初始化快,构造函数初始化分析
- 关于c++中派生类构造函数初始化基类的记录
- C++基类、派生类的初始化
- [笔试题 1][c/c++]关于默认构造,拷贝构造,重载赋值运算符,隐式转化
- 一道关于C++二维数组的问题
- 一道关于绑鞋带的笔试题
- 一道关于员工与部门查询的SQL笔试题
- 分享一道笔试题目--关于static和extern变量的问题
- 一道c++笔试题
- 一道经典的C++题,关于分钱的问题,适合新手阅读(黑客X档案论坛题目)
- 关于一道枚举笔试题(枚举的初始值赋值)
- C++::一道有趣的面试题(关于delete)