C++重定义默认参数的问题

 我来答
百度网友ded4135
高粉答主

2018-02-02 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2.7万
采纳率:87%
帮助的人:1.2亿
展开全部

初学C++,  关于类的声明与实现,要遵守“实现抽象”、“数据隐藏”的原则。因此一般将声明部分放在头文件中,类的成员函数的具体实现放在源代码文件中。但有时为了省事,将头文件中的类的成员函数的声明直接复制到代码文件中,一般情况下是不会出现问题的。但当成员函数的声明中为形参指定了实参时,这样直接复制过去就会造成:error  C2575: 重定义默认参数。初学C++,  关于类的声明与实现,要遵守“实现抽象”、“数据隐藏”的原则。因此一般将声明部分放在头文件中,类的成员函数的具体实现放在源代码文件中。但有时为了省事,将头文件中的类的成员函数的声明直接复制到代码文件中,一般情况下是不会出现问题的。但当成员函数的声明中为形参指定了实参时,这样直接复制过去就会造成:error  C2575: 重定义默认参数。

因此我们只需要在头文件,或者源文件中声明一次该默认参数,习惯上在头文件中声明。代码如下:

//person.h
#ifndef PERSON_H_
#define PERSON_H_

#include <string>

class Person
{
private:
static const int LIMIT = 25;
std::string  lname; //Person's last name
char fname[LIMIT];  //Person's first name
public:
Person() {lname = "";fname[0] = '\0';} //#1
Person(const std::string &ln, const char *fn = "Heyyou"); //#2
~Person();
void Show() const;
void FormalShow() const;
};
#endif
//--------------------------------------------------------
//--------------------------------------------------------
//person.cpp
#include <iostream>
#include <string>
#include "person.h"

Person::Person(const std::string &ln, const char *fn) //#2
{
lname = ln;
//fname[LIMIT] = *fn;
strcpy(fname,fn); //
}

Person::~Person()
{
std::cout << "Person class have finished!\n";
}

void Person::Show() const
{
std::cout << fname << lname << std::endl;
}

void Person::FormalShow() const
{
std::cout << lname << fname << std::endl;
}

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式