如何在实现文件中使用构造函数?

时间:2011-10-06 00:17:58

标签: c++ class implementation

我正在编写一个程序,旨在吸引用户输入一个类 - 国家 - 并且在面积和人口密度最高的国家/地区cout最大的国家/地区。但是,我正在使用实现文件。

我的默认构造函数应该包含哪些内容?那么其他的构造者呢?这就是我到目前为止所做的:

#ifndef COUNTRY_H
#define COUNTRY_H
#include <string>


class Country 
{
public:


   Country(string name, double area, int population);

   Country();

   string get_name () const;

   double get_area()const;

   int get_population()const;

   double population_density(Country popDensity) const;


   void largest_area(double a);

   void largest_population(int p);

   void most_dense(double d);


private:

    string name;
    double area;
    int population;

};

#endif

#include <iostream>
#include <string>

using namespace std;

#include "COUNTRY_H"

Country :: Country(string name, double area, int population)
{

}

Country :: Country();
{

}

2 个答案:

答案 0 :(得分:1)

在这种情况下,(大多数情况下)您只是初始化成员,并且想要使用初始化列表。

Country: Country(string _name, double _area, int _population): name(_name),area(_area),population(_population)
{}

为了提高新编码器的可读性,我更改了参数名称,使它们与成员变量名称不完全匹配。编译器不会被初始化列表中相同的参数和成员名称混淆。

您的默认构造函数可以具有仅具有默认值的初始化列表,例如name("Transylvania"),area(5),population(42),但是如果很难想到有意义的默认值,那么保留默认构造函数是未定义的,以便类需要值才能构造。

答案 1 :(得分:1)

这里有一堆错误。

  • 您的实施包含名称为COUNTRY_H的文件,我认为其中包含的内容应为#include "Country.h"
  • 在任何include语句之前永远不会有using namespace子句,这可能会导致非常丑陋的错误
  • 你的构造函数按值获取字符串参数,但它应该由const&(引用到const)

对于默认的ctor:它应该将类的每个成员设置为合理的默认值。如果跳过它,将生成默认构造函数并默认构造每个成员,请记住原始类型(例如int,long)最初具有未定义状态。还要记住定义任何构造函数,将阻止生成默认构造函数。使用初始化列表初始化类的成员,不要在构造函数的主体中执行。