#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;
}
//共有四个对象,执行四次构造和析构函数
运行结果:
注:第三个程序阅读还有一些疑惑,等解决了之后再发。