一个c++题目引发的思考
2015-05-31 22:01
411 查看
0x00:之前有个小学弟在群里问了这个题目,由于自己是c++菜逼一枚,就看了看。
A()3
B()
A():0
A():0
B objB2(objB1)初始化的基类和其成员变量objA使用的都是默认构造函数构造,所以输出为0.
code:
#include<iostream> using namespace std; class A{ public: A(){val=0;cout<<"A():"<<val<<endl;} A(int v){val=v;cout<<"A()"<<val<<endl;} private: int val; }; class B:public A{ public: B(int v1,int v2):A(v1),objA(v2){ cout<<"B()"<<endl; } B(B &objB){ cout<<"copy B()"<<endl; } private: A objA; }; int main(){ B objB1(2,3); B objB2(objB1);
return 0;
result:
A()2A()3
B()
A():0
A():0
copy B()
为什么会有这样的结果呢。
首先class B是继承于class A的。所以在初始化构造B的时候,首先需要初始化构造A,然而对于构造函数在执行的时候,先按照初始化列表初始化成员变量,再执行函数体。所以对于B(int v1,int v2):A(v1),objA(v2)这条语句,第一条语句用来初始化基类,再构造派生类,所以输出顺序为2,3。B objB2(objB1)初始化的基类和其成员变量objA使用的都是默认构造函数构造,所以输出为0.
相关文章推荐
- C语言小程序
- c语言中static 用法
- C语言快速排序
- 一起talk C栗子吧(第六回:C语言实例--生成随机数)
- 【C++总结】关于函数返回对象析构的问题
- volatile - C语言变量类型符
- STL源码剖析—list
- 字符串操作(C语言 C++)
- c++设计模式之外观模式
- [C/C++标准库]_[初级]_[计算结构体成员的偏移量]
- [C/C++标准库]_[初级]_[计算结构体成员的偏移量]
- C++ 11 的一些重要新特性
- C语言,推箱子游戏
- 一起talk C栗子吧(第五回:C语言实例--数组巧妙赋值)
- 静态对象是否调用构造函数?
- c++继承与派生
- C++之友元是什么东东
- C++成员函数指针详细使用指南
- [C/C++标准库]_[初级]_[map的查找函数分析]
- [C/C++标准库]_[初级]_[map的查找函数分析]