构造函数与析构函数和this指针

构造函数

c++利用构造函数实现了对象所占内存的赋值.对象初始化时强制执行构造函数,如果我们没有自己实现构造函数,编译器将会提供默认的构造函数.

构造函数是作用于对象初始化的,主要作用在创建对象时的成员变量赋值,构造函数由编译器自动调用,不需要手动调用.当我们使用new时,会先使用malloc申请一块堆区空间,然后调用构造函数为申请的空间赋值.

构造函数语法:

没有返回值:类名(){}

函数名称与类名相同

构造函数可以有参数,可以重载

编译器在创建对象的时候会自动调用构造参数

#include<iostream>

//引用库文件的时候使用<>,引用自己实现的头文件时使用" "

Using namespace std;

//结构体的默认访问权限是pulic,类的默认访问权限是private

Class people{

    int a;

    char b;

Public:

//构造函数:和类名相同 无返回值 可以有参数(重载)

People(){

    cout<<"无参构造"<<endl;

}

People(int a){

     a = a1;

    cout<<"a: "<<a<<endl;

}

People(int a1,char b1){

     a = a1;

     b = b1;

     cout<<"a b:"<<a<<" "<<b<<endl;

}

void fun(){}

};

int main(){

    People p;//会调用无参构造

    People p1(1);//调用一个参数的构造函数

    People p2(1,'2');//调用两个参数的构造函数

     p1.fun();

    //p.fun();

    P2.fun();

}

#include<iostream>

#include<list>

Using namespace std;

Class People{

Public:

     int a ;

     char b;
People(){

    Cout <<"无参构造"<<endl;

}
People(int a1){

     a = a1;

 cout<<"a: "<<a<<endl;

}

People(int a1; char b1){

     a = a1;

     b = b1;

 cout<<"a b :"<<a<<" "<<b<<end1;

}

Void fun(){}

};

int main(){

     People  p(1); //在栈区创建了一个对象p,作用域结束会自动释放p的内存

    //malloc 不会调用构造函数,new 会先调用malloc然后再调用对应的构造函数

    People *p1 = new people();

    People *p2 = new people(1);

    People *p3 = new people(1,'2');

//释放堆区内存

     delete p1;

     delete p2;
    
     delete  p3;
    
 //在堆区数组

     People *p4 = new people[4];//创建了四个people对象在堆区,调用的是无参构造

//释放堆区内存

     delete[ ]p4;

     int *a = new int(3);//在堆区创建了一个int类型的变量值为3

     delete a;

     int *a = new int[3];//在堆区创建了一个int类型的数组大小为12字节

     delete [ ]a1;

}

This 指针

this指向当前对象.在c++中,每一个对象都能通过this指针来访问自己的地址。this指针是所有成员函数的隐含参数.因此在成员函数的内部,他可以用来指向调用函数的对。主要作用区分同名成员变量和参数.

友元函数没有this指针,因为他不是类内部函数.

#include<list>

#include<iostream>

using namespace std;

class people {

    int a;

    public:

    people(int a) {

        this->a = a;//this是指向当前对象的指针,哪个对象调用了含有this的函数,this的函数,this就指向谁

    cout << this->a << endl;

}

};

int main() {

    //people p; //实现了构造函数,编译器就不会实现默认构造函数

    people p(3);
    
    people p1(4);
    
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值