#include <iostream>
using namespace std;
class A
{
public:
A()
{
par=new int[20];//开辟对空间
for(int i=0;i<20;i++)//初始化堆
{
par[i]=i;
}
cout<<"hello\n";
}
A(int a)
{
par=new int[20];
for(int i=0;i<20;i++)
{
par[i]=i;
}
cout<<"hellohellohello\n";
}
void printf()
{
for(int i=0;i<20;i++)
cout<<par[i]<<" ";
}
~A()
{
if(par!=NULL)
{
delete []par;
par=NULL;
}
cout<<"Goodbye!\n";
}
private:
int* par;
};
int main(int argc, const char * argv[])
{
A* a=new A;//调用默认构造函数开辟堆空间时,堆空间中盛放对象,编译器会调用默认的构造函数对对空间中的对象进行初始化
a->printf();//效果和(*a).printf()的效果一样的
delete a;//
a=NULL;
A* b=new A(3);//调用非默认构造函数
b->printf();
delete b;//释放b指向的堆空间, delete指向对象的指针,先调用析构函数对成员变量所指向的堆空间进行释放,再把b所指向的堆空间进行释放
b=NULL;
return 0;
}
1. 执行析构函数:先释放堆中的空间,再释放栈中的空间。
2. 成员变量依附对象存在。
3. 引用即别名
class Circle
{
private:
float x;
float y;
};
Circle p;
Circle q;
P=q;成员变量内容的逐一拷贝,浅拷贝(逻辑拷贝)
4. 函数链 前提前面要是一个对象(类类型)。
5. const对象只能调用const函数
6. 引用即别名节省内存空间
7. this指针非静态成员函数都有this指针,编译器会自动调用
8. (*this).和this-> 的作用效果是相同的
9. 显示使用this指针的情况:1.形参和成员变量同名2.要返回某个对象本身
例子:情况一,形参和成员变量同名
class A
{
public:
A(int a,int b)
{
(*this).a=a;
this->b=b;
}
private:
int a;
int b;
};
class Circle
{
public:
Circle(){}
Circle & setradius(float r)
{
radius=r;
return *this;
}
private:
float radius;
float x_centre;
float y_cenmtre;
}
int main()
{
Circle a(0,0,0,);
a.setradius(10);//其表示的就是对象
}
Circle &setradius(float r)
{
radius=r;
return *this;
}
this 表示返回的对象 this指向对象a,所以*this等价于对象a