第八周项目32-对程序运行结果的理解

来源:互联网 发布:it人才缺口 编辑:程序博客网 时间:2024/06/01 23:10

问题及代码:

/**Copyright (c) 2015,烟台大学计算机学院*All rights reserved.*文件名称:text.cpp*作者:徐健*完成日期:2015年4月23日*版本号:v1.0**问题描述: 理解程序的运行方式*输入描述: 无*程序输出: 调用构造函数以及析构函数的顺序*/#include <iostream>using namespace std;class A{public:    A(){cout<<"A";}    ~A(){cout<<"~A";}};class B{    A *p;public:    B()    {        cout<<"B";        p=new A();    }    ~B()    {        cout<<"~B";        delete p;    }};int main(){    B obj;    return 0;}

2.

#include <iostream>using namespace std;class MyClass{public:    MyClass(int x=0):i(x){cout<<"C"<<i;}    ~MyClass(){cout<<"D"<<i;}    void SetValue(int val){i=val;}    int GetVal(){return i;}private:    int i;};int main(){    MyClass *p[3];    int i;    for (i=0; i<3; i++)    {        p[i]=new MyClass(i);        p[i]->SetValue(p[i]->GetVal()*2);    }    for (i=0; i<3; i++)        delete p[i];    cout<<endl;    return 0;}

3.

#include <iostream>using namespace std;class AA{public:    AA(int i,int j)    {        A=i;        B=j;        cout<<"Constructor\n";    }    AA(AA &obj)    {        A=obj.A+1;        B=obj.B+2;        cout<<"Copy_Constructor\n";    }    ~AA() {        cout<<"Destructor\n";    }    void print()    {        cout<<"A="<<A<<",B="<<B<<endl;    }private:    int A,B;};int main(){    AA a1(2,3);    AA a2(a1);    a2.print();    AA *pa=new AA(5,6);    pa->print();    delete pa;    return 0;}
运行结果:




知识点总结:

此项目对析构函数以及构造函数的调用顺序进行了解析测试,可以看出当定义了一个对象时,如果 此类的构造函数中有其他的类对象,便调用其他类的构造函数,然后调用此对象的构造函数,之后析构函数会按照先进后出,后进先出的原则(与构造函数的调用顺序相反)调用析构函数。

学习心得:

如果能够将构造函数与析构函数熟悉其调用顺序,可以将其用于一些特殊的地方,从而实现一些出人意料的效果。



0 0
原创粉丝点击