2011-10-06 80 views
2

我正在编写一个计划,旨在为一个班级 - 国家 - 以及面积最大的国家以及人口最密集的国家提供用户输入。然而,我有执行文件。如何在实现文件中使用构造函数?

什么应该进入我的默认构造函数?其他构造函数呢?这是我到目前为止有:

#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(); 
{ 

} 

回答

1

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

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

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

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

1

这里有一堆东西是错误的。

  • 您的实现包括一个名为COUNTRY_H一个文件,我会承担包括应#include "Country.h"
  • 永远有using namespace条款之前的任何包含语句,这可以使真正丑陋的错误
  • 您构造函数获取它的字符串参数按值,但应该把它通过const&(参考给const是)

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