C++析构函数,This指针,函数链

来源:互联网 发布:奥数 高斯算法 教师版 编辑:程序博客网 时间:2024/06/05 02:34

#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

 

0 0