当前位置:首页 > Software > C++ > 正文内容

c++类的构造函数

Doraemon5年前 (2019-10-19)C++5531

 c++的目标之一是让使用类对象就像使用标准类型一样, 也就是说,常规的初始化语法不适用于类型Stock:

 int year=2001;
 struct thing 
  {
     char *pn;
     int m;
     };
     thing amabob={"wodget",-23};
     Stock hot={"Sukie'Autos,Inc.",200,50.25};

不能像上面这样初始化Stock对象的原因在于,数据部分的访问状态是私有的,这意味着程序不能直接访问数据成员。因此需要设计合适的成员函数,才能成功的将对象初始化。

一般来说,最好是在创建对象时对它进行初始化。列如,请看下面代码。

Stock gift;
gift.buy(10,24,75)

就Stock类当前的实现而言,gift对象的company成员是没有值的。为此,c++提供了一个特殊的成员——类构造函数,专门用于构造新对象、将值赋给他们的数据成员。

声明和定义构造函数

  现在需要创建Stock的构造函数。由于需要为Stock对象提供3个值,因此应为构造函数提供3个参数。程序可能只想设置company成员,而将其他设置为0;这可以使用默认参数来完成。因此,原型如下所示:

//constructor prototype with some default arguments
Stock(const string &co,long n=0,double pr =0.0);

第一个参数是指向字符串的指针,该字符串用于初始化成员company.n和pr参数为shares和share_val提供值。注意没有返回类型。原型位于类声明的公有部分。

  下面是构造函数的一种可能定义:

//constructor definition
Stock::Stock(const string &co,long n,double pr)
{
  company =co;
  if(n<0)
   {
     std::cerr<<"number of shares can't be negative;"
              <<company <<"shares set to 0.\n";
              shares=0;
    }
    else 
        shares=n;
        shares_val=pr;
        set_tot();
 }

成员名和参数名

一种常见的做法是在数据成员名中使用m_前缀:

另一种,在成员名中使用后缀_:

无论哪一种做法,都可在公有接口中包含company和shares。

使用构造函数

c++提供了两种使用构造函数来初始化对象的方式。第一种方式是显示地调用构造函数:

Stock food=Stock("World Cabbage",250,1.25);

这将food对象的company成员设置为字符串“World Cabbage”,将shares成员设置为250,依次类推。

另一种方式是隐式地调用构造函数:

Stock garment("Furry Mason",50,2.5));

一般来说,使用对象来调用方法:

stock1.show();

但无法使用对象来调用构造函数,因为在构造函数构造出对象之前,对象是不存在的。

默认构造函数

默认构造函数是在为提供显式初始值时,用来创建对象的构造函数。也就是说,它是用于下面这种声明的构造函数:

Stock fluffy_the_cat;

默认构造函数没有参数,因为声明中不包含值。但是当且仅当没有定义任何构造函数时,编译器才会提供默认构造函数。

实际上,通常应初始化所有的对象,以确保所有成员一开始就有已知的合理值。因此,用户定义的默认构造函数通常给所有成员提供隐式初始值。例如,下面是为Stock类定义的一个默认构造函数:

Stock::stock()
{
  company="no name";
  shares=0;
  share_val=0.0;
  total_val=0.0;
}



扫描二维码推送至手机访问。

版权声明:本文由我的FPGA发布,如需转载请注明出处。

本文链接:https://world.myfpga.cn/index.php/post/26.html

分享给朋友:

“c++类的构造函数” 的相关文章

C和C++中的注释

C和C++中的注释

什么是注释呢?这简直是废话,就像您在读书时候做的笔记,复习的时候圈的重点,简单来说,它并不是程序的一部分,但是它可以进行解释程序的行为或者任何想加在程序里面的东西。它的格式就两种,第一种/* 我是注释    我还是注释   &nb...

C++的继承和派生

C++的继承和派生

#include <iostream> using namespace std; class fenshu { public: int xuehao; int yuwen;  }; ...