如何在实现文件中使用构造函数?
问题描述:
我正在编写一个计划,旨在为一个班级 - 国家 - 以及面积最大的国家以及人口最密集的国家提供用户输入。然而,我有执行文件。如何在实现文件中使用构造函数?
什么应该进入我的默认构造函数?其他构造函数呢?这是我到目前为止有:
#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();
{
}
答
在这种情况下,(并且大多数情况下),你只初始化成员,并且要使用初始化列表。
Country: Country(string _name, double _area, int _population): name(_name),area(_area),population(_population)
{}
为了提高对新编码的可读性,使他们不完全匹配的成员变量的名字我已经改变了参数名。编译器不会被初始化程序列表中的相同参数和成员名称混淆。
您的默认构造函数可以包含一个仅具有默认值的初始化程序列表,例如, name("Transylvania"),area(5),population(42)
,但是如果很难想到有意义的默认值,那么保持默认构造函数未定义以便该类需要值才能构建是有效的。
答
这里有一堆东西是错误的。
- 您的实现包括一个名为
COUNTRY_H
一个文件,我会承担包括应#include "Country.h"
- 永远有
using namespace
条款之前的任何包含语句,这可以使真正丑陋的错误 - 您构造函数获取它的字符串参数按值,但应该把它通过
const&
(参考给const是)
对于默认的构造函数:它应该在类的每一个成员设置为SENS ible默认。如果跳过它,将会生成一个默认的构造函数,并默认构造每个成员,请记住原始类型(例如int,long)具有最初未定义的状态。还记得定义任何构造函数会阻止生成默认的构造函数。使用初始化列表初始化类的成员,不要在构造函数的主体中执行它。