码迷,mamicode.com
首页 > 编程语言 > 详细

C++ 构造函数

时间:2020-06-03 13:57:40      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:string   cpp   添加   error   ali   重载   div   默认   一个   

例一(类初始化错误用法):

struct thing
{
    char * pn;
    int m;
};
thing amabob = {"wodget", -23};    // valid initialization
Stock hot = {"Sukie‘s Autos, Inc.", 200, 50.25};    // No! compile error

  出错原因:数据访问状态私有(可改为公有,但违背数据隐藏的初衷)

特殊成员函数——类构造函数(可用于类初始化):

专门用于构造新对象(创建对象)、将值赋给它们的数据成员(初始化)。

  • 原型位于类声明的公有部分
  • 没有声明类型,名称与类名相同
  • 程序声明对象时,将自动调用构造函数
  • 参数名不能与类成员名相同
    • 原因:此时构造函数内直接使用类成员名称会发生混乱
    • 解决
      • 方案一:数据成员名中使用m_前缀
      • 方案二:成员名中使用后缀_

使用构造函数:

  • 显示调用:
    Stock food = Stock("World Cabbage", 250, 1.25);    // 显示调用
  • 隐式调用:
    Stock garment("Furry Mason", 50, 2.5)    // 隐式调用
    

      结构更紧凑

  • 可以与new结合使用:
    Stock *pstock = new Stock("Electroshock Games", 18, 19.0)    // 结合new使用隐式调用
    
  • 构造函数被用来创建对象,而不能通过对象来调用(在构造函数构造出对象前,对象不存在)

默认构造函数:

——在未提供显示初始值时,用来创建对象的构造函数:

Stock fluffy_the_cat;    // use the default constructor
  • 没有提供构造函数,C++将自动提供默认构造函数,它不做任何工作
    Stock::Stock() {}
    

      类似于未初始化的int x;

  • 仅当没有定义任何构造函数时,编译器才提供默认构造函数。为类定义了构造函数后,程序员就必须为它提供默认构造函数才能使用默认构造函数。
  • 定义默认构造函数的方式:
    • 方式一:给所有参数提供默认值
      Stock(cost string & co = "Error", int n = 0, double pr = 0.0);    // 定义构造函数时添加参数默认值  
    • 方式二:函数重载一个无参构造函数
      Stock();
    • 隐式地调用默认构造函数时,不要使用圆括号
      Stock first;    // calls default constructor
      Stock second();    // declare a function
      

        如第二个:变成了返回Stock对象的函数的声明

    • 在设计类时,通常应提供对所有类成员做隐式初始化的默认构造函数

C++ 构造函数

标签:string   cpp   添加   error   ali   重载   div   默认   一个   

原文地址:https://www.cnblogs.com/suui90/p/13036623.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!