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

c++类的构造函数

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

 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://myfpga.cn/index.php/post/26.html

分享给朋友:

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

一小时搞定C++_8

一小时搞定C++_8

#include <iostream> using namespace std; int main() { if(1+1==2) { cout << "1+1=2"; }...

一小时搞定C++_0 前言 必看

一小时搞定C++_0 前言 必看

本教程内所有代码均不包含运行的结果,请大家先看https://myfpga.cn/?id=9https://myfpga.cn/?id=11...

C++入门 输出Hello World

C++入门 输出Hello World

#include <iostream>using namespace std;int main(){     cout << "Hello, world!...

变量作用域

变量作用域

#include<iostream> void print(); int main() { char a=0; for(a=0;a<20;a++) print(); return 0;  }  v...

Break和Continue的区别

Break和Continue的区别

#include<iostream>  using namespace std; int main() { int x=0; for(x=0;x<10;x++) { if(x==3) break;...