第十一周阅读程序(4)

来源:互联网 发布:文本相似度匹配算法 编辑:程序博客网 时间:2024/05/22 15:01

代码:

#include<iostream>using namespace std;class Part  //部件类{public:    Part();    Part(int i);    ~Part();private:    int val;};Part::Part(){    val=0;    cout<<"调用Part的默认构造函数:"<<val<<endl;}Part::Part(int i){    val=i;    cout<<"调用Part的构造函数: "<<val<<endl;}Part::~Part(){    cout<<"调用Part的析构函数: "<<val<<endl;}class Whole: public Part{public:    Whole();    Whole(int,int,int,int);    ~Whole();private:    Part one;    Part two;    int data;};Whole::Whole(){    data=0;    cout<<"调用whole的默认构造函数: "<<data<<endl;}Whole::Whole(int p, int i,int j,int k):Part(p),one(j),two(i),data(k)  //问题2{    cout<<"调用whole的构造函数: "<<data<<endl;}Whole::~Whole(){    cout<<"调用whole的析构函数: "<<data<<endl;}void f(){    Whole w1;    Whole w2(1,2,3,4);}int main(){    f();    return 0;}


运行结果:

学习心得:

开始自己分析程序的时候,没有注意到part的默认构造函数,还有one,two都是part类的,在运行结果出来之后发现,比我写的多好多,开始不明白为什么有这么多part的默认构造函数,然后单步执行了一下,才有一些些明白,但还不是很清楚。

问题:

将Whole类的构造函数(见注释//问题2)改为下面形式,请解释出现的警告信息。
代码:

#include <iostream>using namespace std;class Part  //部件类{public:    Part();    Part(int i);    ~Part();private:    int val;};Part::Part(){    val=0;    cout<<"调用Part的默认构造函数:"<<val<<endl;}Part::Part(int i){    val=i;    cout<<"调用Part的构造函数: "<<val<<endl;}Part::~Part(){    cout<<"调用Part的析构函数: "<<val<<endl;}class Whole: public Part{public:    Whole();    Whole(int,int,int,int);    ~Whole();private:    Part one;    Part two;    int data;};Whole::Whole(){    data=0;    cout<<"调用whole的默认构造函数: "<<data<<endl;}Whole::Whole(int p, int i,int j,int k):Part(p),two(i),one(j),data(k)  //问题2{    cout<<"调用whole的构造函数: "<<data<<endl;}Whole::~Whole(){    cout<<"调用whole的析构函数: "<<data<<endl;}void f(){    Whole w1;    Whole w2(1,2,3,4);}int main(){    f();    return 0;}


||=== 生成: Debug in a (compiler: GNU GCC Compiler) ===|
F:\新建文件夹\a\main.cpp||In constructor 'Whole::Whole(int, int, int, int)':|
F:\新建文件夹\a\main.cpp|34|warning: 'Whole::two' will be initialized after [-Wreorder]|
F:\新建文件夹\a\main.cpp|33|warning:   'Part Whole::one' [-Wreorder]|
F:\新建文件夹\a\main.cpp|42|warning:   when initialized here [-Wreorder]|
||=== Build finished: 0 error(s), 3 warning(s) (0 minute(s), 3 second(s)) ===|
原因:程序先执行one,在执行two

0 0
原创粉丝点击