首页 > 作文

c++学习之对象和类——构造函数和析构函数

更新时间:2023-04-07 06:27:23 阅读: 评论:0

  再认真理一遍~

0.类

  这里先来定义一个类,便于后面的理解。参考c++ primer plus

class stock{private:    std::string company;    long shares;    double share_val;    double total_val;    void t_tot(){total_val = shares * shares_val;}public:    //这里是函数声明,不是重点就不写了}

1. 构造函数

(1)作用

  在c++ primer plus里引出构造函数这个概念的是对类对象的初始化。由于类对象中数据部分的访问状态通常是私有的,因此不能像int year = 2019这样对类对象中的company、shares、share_val初始化,而只能通过成员函数来访问数据。于是我们会想,那就写一个成员函数嘛,每次创建对象时调用它就好啦~~

  是的,c结婚典礼仪式++就提供了这样一个特殊的成员函数——类构造函数,专门用于构造新对象、将值赋给他们的新成员!这里就提到了构造函数的第二个作用当然应该是最重要的作用——创建对象

  c++在创建类对象时,会自动调用它,是不是很方便!

(2)声明和定义构造函数

① 声明

  在这里,我们可以只设置company的值,让其他默认为0,那么我们的构造函数声明可以长这样:

stock(const string & co,long n = 0,double pr = 0.0);

② 定义

  下面是一种可能的定义:

stock(const string & co,long n,double pr){    company = co;    shares = n;    share_val = pr;    t_tot();}

注:构造函数的参数表示的不是类成员,而是赋给类成员的值,因此参数名不能与类成员名相同哦。

stock(const string & company,long shares,double share_val)//no!!!不可以这样,不然就是shares = shares{ ...}

(3)使用构造函数

  c++提供了两种使用构造函数来初始化对象的方式——显式调用和隐式调用。

① 显示地调用构造函数

stock food = stock("goo",250,250);//将food对象的我爱这土地仿写company设置为"hua",将shares成员设置为250,将shares_val设置为250

② 隐式地调用构造函数

stock food("goo",250,250); //这和上面的方面是等价的

ps:下面是与new一起使用的方法

stock *pstock = new stock("goo",250,250);//这条语句创建一个stock对象,并将该对象的地址赋给pstock指针。

注:无法使用对象来调用构造函数,因为对象就是构造函数创建的,在构造函数创建对象之前,对象是不存在的。(构造函数不能是虚函数,后面理解)

(4)默认构造函数

stock cat;  //这种情况下,系统为提供显式初始值,系统调用默认构造函数。就和int a;但没有提供初始值一样。默认构造函数可能为stock::stock(){ }.

但是,这种情况是有前提的:

① 当且仅当没有定义任何构造函数时,编译器才会提供默认构造函数。(要么一个都没有)

② 若定义了非默认构造函数,那必须为他提供默认构造函数。(要么两个都有)

定义默认构造函数的方式有两种:

stock(const string & co = "errer",int n=0,double pr = 0.0);//给已有构造函数的所有参数提供默认值
stock();//通过函数重载来定义一个没有参数的构造函数

2.析构函数

  书上说“对象过期时,程班级管理细则序将自动调用一个特殊的成员函数,该函数的名称令人生畏——析构函数”。。。hhhh笑死~你可是一本正经书丫。

(1)作用

  析构函数完成清理工作,如果构造函数用new来分配内存,则析构函数将使用delete来释放内存。没有使用new,那么析构函数实际上没有需要完成的任务,只要让编译器生成一个隐式析构函数即可。

(2)形式

  在构造函数前加“~”,如“~stock”。

  什么都不做时,可以这样定义:

stock::~stock(){
  //也可以在里面加一点东西,方便看在何时调用,如 cout << "bye~" << endl;}

(3) 调用时机

  由编译器决定,通常不应再代码中显式调用:

① 如果创建的时静态存储对象,则其析构函数将在程序结束续约中介费要交吗时自动调用。

② 如果创建的时自动存储类对象(像前面实例那样),则其析构函数将在程序执行完代码块时自动被调用。

③ 如果对象是new创建的,则它将驻留再栈内存或自由存储区中,当使用delete来释放内存时,其析构释迦怎么吃函数将自动调用。

注:类对象过期时析构函数将自动被调用,因此必须有一个析构函数。如果程序员没有提供,那么编译器将隐式地声明一个默认析构函数,并在发现导致对象被删除地代码后,提供默认析构函数地定义。

本文发布于:2023-04-07 06:27:21,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/b66674f2ba7ec71c3e5680685cc24828.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:c++学习之对象和类——构造函数和析构函数.doc

本文 PDF 下载地址:c++学习之对象和类——构造函数和析构函数.pdf

标签:函数   对象   定义   成员
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图