#2
rjsp2021-01-18 22:49
估计是这个意思
程序代码: #include <iostream> #include <string> #include <cstring> using namespace std; class Person{ private: static const size_t LIMIT=25; string lname; char fname[LIMIT]; public: Person(){ lname=""; fname[0]='\0'; } Person(const string &ln,const char *fn="Heyyou"); void show()const; void FormalShow()const; }; Person::Person(const string &ln,const char *fn) { lname=ln; strncpy(fname,fn,LIMIT-1); fname[LIMIT-1]='\0'; } void Person::show() const { std::cout << "题目没交代Show要干什么: " << lname << ", " << fname; } void Person::FormalShow() const { std::cout << "题目没交代FormalShow要干什么: " << lname << ", " << fname; } int main( void ) { Person one; Person two("iryth"); Person three("iryth","asd"); one.show(); cout<<endl; one.FormalShow(); cout<<endl; two.show(); cout<<endl; two.FormalShow(); cout<<endl; three.show(); cout<<endl; three.FormalShow(); cout<<endl; } 但这代码是挺恶心的,工作中应该按标准写,即 #include <iostream> #include <string> #include <cstring> class Person { public: Person() : lname_(), fname_("") { } explicit Person( const std::string& lname, const char* fname="Heyyou" ) : lname_(lname) { strncpy( fname_,fname, std::size(fname_)-1 ); fname_[std::size(fname_)-1] = '\0'; } private: std::string lname_; char fname_[25]; friend std::ostream& operator<<( std::ostream& os, const Person& ps ) { return os << ps.lname_ << ", " << ps.fname_; } }; using namespace std; int main( void ) { Person one; cout << one << endl; Person two("iryth"); cout << two << endl; Person three("iryth", "asd"); cout << three << endl; } |
下面是一个非常简单的类定义:
程序代码:
class Person{
private:
static const LIMIT=25;
string lname;
char fname[LIMIT];
public:
Person(){
lname="";
fname[0]='\0';
}
Person(const string &ln,const char *fn="Heyyou");
void show()const;
void FormalShow()const;
};
private:
static const LIMIT=25;
string lname;
char fname[LIMIT];
public:
Person(){
lname="";
fname[0]='\0';
}
Person(const string &ln,const char *fn="Heyyou");
void show()const;
void FormalShow()const;
};
它使用了一个string对象和一个字符数组,让您能够比较它们的用法,请提供未定义的方法的代码,以完成这个类的实现,再编写一个使用这个类的程序,它使用了三钟可能的构造函数的调用(没有参数,一个参数和两个参数)以及两种显示方法。下面是一个使用这些构造函数和方法的例子:
程序代码:
Person one;
person two("iryth");
Person three("iryth","asd");
one.show();
cout<<endl;
one.FormalShow();
person two("iryth");
Person three("iryth","asd");
one.show();
cout<<endl;
one.FormalShow();
以上就是题目的描述,但我有以下几个问题:
问题1:这行语句是不是少了个int
static const LIMIT=25;
应修改为这样:
static const int LIMIT=25;
问题2:这行默认构造函数的声明中是不是应该删除函数体?
Person(){
lname="";
fname[0]='\0';
}
lname="";
fname[0]='\0';
}
改为这样声明:
Person();
然后在默认构造函数的实现中再来添加该函数体。
问题3:下面这行语句,
Person(const string &ln,const char *fn="Heyyou");
在默认构造函数的声明中,可以直接对参数进行初始化吗?
是不是应该修改为下面这样?
Person(const string &ln,const char *fn);
问题4:题目要求提供三种可能的构造函数调用,是不是要分别添加三个方法的实现?即:
分别为默认构造函数的实现,带一个参数的构造函数的实现,带二个参数的构造函数的实现。
但是一个Person类中可以同时包含两个构造函数的实现吗?
请就以上4个问题分别解答。
代码如下,错误一大堆:
程序代码:
#include<iostream>
#include<string>
using namespace std;
class Person{
private:
static const int LIMIT=25;
string lname;
const char fname[LIMIT];
public:
Person();
Person(const string &ln,const char *fn);
void show()const;
void FormalShow()const;
};
Person::Person(){
lname="";
fname[0]='\0';
}
Person::Person(const string &ln,const char *fn){
lname=ln;
fname=fn;
}
Person::Person(const string &ln){
lname=ln;
}
Person::show()const{
cout<<"包含2个参数:"<<endl<<lname<<endl<<fname<<endl;
}
Person::FormalShow() const{
cout<<"包含1个参数:"<<endl<<lname<<endl;
}
int main(){
Person one;
person two("iryth");
Person three("iryth","asd");
one.show();
one.FormalShow();
return 0;
}
#include<string>
using namespace std;
class Person{
private:
static const int LIMIT=25;
string lname;
const char fname[LIMIT];
public:
Person();
Person(const string &ln,const char *fn);
void show()const;
void FormalShow()const;
};
Person::Person(){
lname="";
fname[0]='\0';
}
Person::Person(const string &ln,const char *fn){
lname=ln;
fname=fn;
}
Person::Person(const string &ln){
lname=ln;
}
Person::show()const{
cout<<"包含2个参数:"<<endl<<lname<<endl<<fname<<endl;
}
Person::FormalShow() const{
cout<<"包含1个参数:"<<endl<<lname<<endl;
}
int main(){
Person one;
person two("iryth");
Person three("iryth","asd");
one.show();
one.FormalShow();
return 0;
}
[此贴子已经被作者于2021-1-18 18:36编辑过]