如何在实现文件中使用构造函数
How to use constructors in an implementation file?
我正在编写一个程序,该程序旨在为类- Country -获取用户输入,并计算面积最大的国家以及人口最稠密的国家。但是,我正在使用实现文件。
默认构造函数中应该包含什么?其他构造函数呢?这是我目前所看到的:
#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"
- 从来没有在任何include语句之前有一个
using namespace
子句,这可能会导致真正丑陋的bug - 你的构造函数按值接受它的字符串参数,但它应该接受
const&
(即引用到const)
对于默认的actor:它应该为类的每个成员设置一个合理的默认值。如果跳过它,将生成默认构造函数并默认构造每个成员,请记住基本类型(例如int, long)最初具有未定义状态。还要记住,定义任何构造函数都将阻止生成默认构造函数。使用初始化列表来初始化类的成员,不要在构造函数体中这样做。
相关文章:
- 类中的数组变量C++导致"was not declared in this scope"实现文件的一个函数中错误,但在构造函数中不会导致错误
- 如何从另一个文件调用类构造函数?
- 如何使输入文本文件成为构造函数参数?c++
- C++ 在头文件或构造函数中初始化 const 类成员变量?
- C++头/实现文件中的默认和重载构造函数?
- 文件中定义的 Constexpr 构造函数.cpp会导致链接错误
- 如果类划分为单独的文件,则不调用默认构造函数
- 将单独的头文件和类定义文件链接到主函数文件 - G++ 返回重载"undefined reference to"构造函数
- 从文件实例化:构造函数采用std:ifstream&作为参数
- 如何使用类构造函数从文件中获取值?C++
- 打开不存在的文件时如何使流构造函数失败?
- 如何解析文本文件并使用构造函数中的文件输入来创建对象的容器
- 我想传入文件的构造函数模式
- 找不到构造函数 - 如何将 CPP 文件添加到 Qt 构建过程
- 如何将模板构造函数专用化移动到 cpp 文件
- 具有POSIX文件描述符对象的C 复制构造函数
- 从类构造函数中的txt文件读取
- 如何将显式声明的构造函数分离到 .h 和 .cpp 文件中?
- 将文件传递给构造函数进行读取
- 确认从类构造函数中的文本文件初始化变量