C++类<二>:构造函数

上篇随笔中提到构造函数的介绍,这篇来深究一下.

构造函数名与类名一致.

构造函数的工作室保证每个对象的数据成员具有合适的初始值.例书店书籍构造体

class Sales_item{
 public:
        bool same_isbn(const Sales_item &rhs) const        //判断两书的isbn是否相同.
                            {  return isbn == rhs.isbn; }
        explicit Sales_item(const std::string &book):
                         isbn(book), units_sold(0), revenue(0.0){}
        explicit Sales_item(std::istream &is);                      
 private:
    std::string isbn;                                           
    unsigned int units_sold;
    double revenue;    
      };

一,构造函数可被重载

Sale_item(const std::string &book):  初始化数据  {};

Sale_item(std::istream &is);

Sale_item();

均为构造函数,使用时根据传入实参来决定使用哪个函数.

需要创建该类型的对象,编译器就会运行一个构造函数

 

二,构造函数初始化式

① Sale_item():  初始化列表(初始化阶段) {(普通的计算阶段)}

   在普通的计算阶段进行对数据成员赋值可达同样效果,但是.......

   没有默认构造函数的类类型的成员  & const数据成员 & 引用类型成员

   这三种数据成员都必须在初始化列表中进行初始化.

②按初始化次序初始化

   Sale_item(int val):j(val), i(j) {}

   这种有先后传递关系的初始化必须按照初始化顺序排列;

③,默认构造函数

   只有当一个类没有定义构造函数时,编译器才会自动生成一个默认构造函数

   (包括定义了非空参数构造函数,编译器都不会合成默认构造函数)

   Sale_item myobj = Sale_item();

   创建并初始化一个类对象用来初始化myobj.

 

三,隐式类类型转换,显式使用构造函数.

①隐式类类型转换

   调用成员函数same_isbn(const Sale_item &rhs)时,函数期待一个Sale_item类型的形参,

   若此时传入字符串"9-999-99999-9".   即myobj.same_isbn("9-999-99999-9");

   编译器使用一个接受一个 string 的 Sale_item 构造函数从字符串生成一个新的 Sale_item 对象(临时的)

   传给 same_isbn 函数.     这个行为称为隐式类类型转换.

②显式使用构造函数

   如篇头类中构造函数所示,于构造函数前添加 explicit ,则所产生的 Sale_item 对象在使用成员函数时的

   隐式类类型转换将被抑制.

   此时需要使用显式构造函数传递实参给函数 same_isbn() .即

   myobj.same_isbn(Sale_item("9-999-99999-9"));

  

四,类成员的显式初始化

   struct Data{   int ival ;   char *ptr;   };

   Data val1 = { 0 , 0};

   Data val2 = { 1024, "A string"};

  显示初始化只需按类的数据成员的定义顺序来进行逐项初始化.

 

 

 

原文链接: https://www.cnblogs.com/boloyonghao/archive/2012/07/16/2593886.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C++类<二>:构造函数

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/55417

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 上午6:32
下一篇 2023年2月9日 上午6:33

相关推荐