第二学期第六周 程序阅读

 
#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;
}
/*分析:定义B类的对象obj,执行B类的构造函数,其中包含了A类对象的定义*/
运行结果:
<img src="https://img-blog.csdn.net/20150415164647096?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmFpZHVfMjE2OTg4MTc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
 
#include <iostream>
using namespace std;
class example
{
public:
    example(){cout<<"Default Constructing!"<<endl;}
    example(int n)
    {
        i=n;
        cout<<"Constructing: "<<i<<endl;
    }
    ~example(){cout<<"Destructing: "<<i<<endl;}
    int get_i(){return 0;}
private:
    int i;
};
int sqr_it(example o)
{
    return o.get_i()*o.get_i();
}
int main()
{
    example x(10);
    cout<<x.get_i()<<endl;
    cout<<sqr_it(x)<<endl;
    return 0;
}
//最后是定义了两个对象x和o,析构函数执行两次

 
 

运行结果:


#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个对象的地址依次分别赋给指针数组的每一个成员
        p[i]->SetValue(p[i]->GetVal()*2);
    }
    for(i=0;i<3;i++)
        delete p[i];
    cout<<endl;
    return 0;
}
//共有四个对象,执行四次构造和析构函数

 

运行结果:


注:第三个程序阅读还有一些疑惑,等解决了之后再发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值