C++类的声明与实现中容易忽视的重定义默认参数的错误

    初学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;
}
   

   


  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值