C++:类中的构造函数、析构函数和拷贝构造函数

C++中的类,是由C++中的结构体演变而来的,C++中的类和结构体都是可以继承的,类中成员都默认是私有权限private类:就是一个对象的模板,类中会包含,成员属性,成员方法(行为)。对象:实例化出的类对象。

this指针是一个类内默认给非静态成员函数提供的,指向类对象的指针类对象的指针----->哪个对象使用我,我就指向哪个对象。指向类对象,类名*constthis ----->可以通过指针改变数值,但是不能指针的指向。当成员函数中的形参和成员属性,同名时,使用this指针区分成员属性,当构造函数的形参和成员属性同名。

构造函数当实例化类对象时,给类对象初始化空间。栈区:实例化类对象时,自动调用构造函数
堆区:定义类指针时,不调用构造函数,在使用new申请空间时才调用构造函数。

析构函数释放类对象的空间。栈区:类对象消亡后,主动调用。堆区:何时delete何时调用
先构造的后析构,后构造的先析构。只要显性定义了析构函数,系统不会再提供默认的析构。

拷贝构造函数用已有的类对象给另一个类对象初始化时,使用的,系统自动调用。

1.使用已有的类对象初始化新的类对象时
2.类对象作为函数参数时,也会调用拷贝构造函数,而不是类对象的引用作为函数的参数,因为引用作为参数,不会开辟空间,
3.类对象作为函数的返回值

习题

#include <iostream>
#include <cstring>
using namespace std;

class Stu
{
public:
    string name;
    int age;
    int score;
    int *high;
public:

    Stu ()
    {
        cout << "无参构造函数"<<endl;
        this->high = new int;
        this->name = new char[10];

    }
    ~Stu()
    {
        cout << "调用析构函数"<<endl;
        delete high;

    }
    Stu (Stu &s):name(s.name),age(s.age),score(s.score)
    {
        cout << "调用拷贝函数" << endl;
        this->high = new int;
        *(this->high) = *(s.high);
    
    }
    void show();
  };

void Stu::show()
{
    cout << "姓名 :" << name << endl;
    cout << "年龄 :" << age << endl;
    cout << "分数 :" << score << endl;
    cout << "身高 :" << *high << endl;
}

int main()
{
    Stu s1;
    s1.age=99;
   * s1.high=199;
    s1.name="zhangsan";
    s1.score=66;
  s1.show();
    Stu s2=s1;
  s2.show();

    return 0;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值