如何处理C++类初时化问题
#include <iostream>
#include <string>
using namespace std;
class Employee
{
public:
Employee(){name="王五";street="24";city="44";zip=85345;}
//Employee (string name="张三", string street="24", string city="44", int zip=85345);
//:name(name),street(street),city(city),zip(zip){};
Employee(const Employee&e);
~Employee();
void display();
void change_name(string);
void setstreet(string);
void setcity(string);
void setzip(int);
private:
string name;
string street;
string city;
int zip;
};
Employee::Employee(const Employee &e)
{
name=e.name;
street=e.street;
city=e.city;
zip=e.zip;
}
void Employee::display()
{
cout<<"姓名:"<<name<<"\n"<<"街道地址:"<<street<<endl;
cout<<"城市:"<<city<<"\n"<<"邮政编码:"<<zip<<endl;
cout<<endl;
}
inline void Employee::change_name(string new_name)
{
name = new_name;
}
void Employee::setstreet(string new_street)
{
street = new_street;
}
void Employee::setcity(string new_city)
{
city = new_city;
}
void Employee::setzip(int new_zip)
{
zip = new_zip;
}
Employee::~Employee(){cout<<"调用";}
int main()
{int c;
Employee *Pointer;
Employee person1;
Pointer=&person1;
person1.setcity("string");
Pointer->display();
Employee person2("mjm","xixia","nanjin",468);
Employee person3(person1);
person2.change_name("Jiaming Mao");
person2.change_name("李四");
person3.setzip(54654654);
person2.display();
person3.display();
cin>>c;
cin>>c;
}
要求定义三个Employee类对象Person1, Person2, Person3,分别用缺省构造函数、带默认形参值的构造函数,拷贝构造函数初试化。前两种初始化如何实现
Employee(){name="王五";street="24";city="44";zip=85345;}
Employee (string name="张三", string street="24", string city="44", int zip=85345);
: name(name),street(street),city(city),zip(zip){};
不能一起存在啊 请教多一个为问题
指针Pointer分别与对象Person1, 或Person2, 或Person3调用Employee类成员函数怎么实现,我只能调用一个
Employee(){name="王五";street="24";city="44";zip=85345;}
Employee (string name="张三", string street="24", string city="44", int zip=85345);
: name(name),street(street),city(city),zip(zip){};
改成
Employee(){name="王五";street="24";city="44";zip=85345;}
Employee (string name="张三", string street="24", string city="44", int zip=85345)
: name(name),street(street),city(city),zip(zip){};
结果还是不行,原因是这两个构造函数都可以 Employee e 这样调用,也就是说,当你这样写的时候,不知道该调用哪个好。
解决方法,把第二个构造函数的其中前一个或两个或三个默认值去掉。如:
Employee(){name="王五";street="24";city="44";zip=85345;}
Employee (string name, string street="24", string city="44", int zip=85345)
:name(name),street(street),city(city),zip(zip){};
至于指针调用,每次让它指向不同对象,然后调用就可以了。 主要问题是如何在一个程序中用缺省构造函数、带默认形参值的构造函数分别初始化对象
按楼上这么改,如何完全只使用默认值而调用
Employee (string name, string street="24", string city="44", int zip=85345)
:name(name),street(street),city(city),zip(zip){};
这句呢
[ 本帖最后由 liuaa24 于 2006-12-9 14:21 编辑 ] 原帖由 liuaa24 于 2006-12-9 13:21 发表
主要问题是如何在一个程序中用缺省构造函数、带默认形参值的构造函数分别初始化对象
按楼上这么改,如何完全只使用默认值而调用
Employee (string name, string street="24", string city="44 ...
如果楼上认为带默认形参值的构造函数是全部参数都有默认值的话,那是不行的。
因为全部参数都有了默认值,可以当无参数的构造函数来使用,而当你这样用的时候,程序不知道该调用哪个构造函数。
如果那样做的话,错误提示:
call of overloaded `Employee()' is ambiguous
candidates are: Employee::Employee(std::string, std::string, std::string, int)
Employee::Employee()
所以觉得老师的要求是无聊的 他没要求你要全用默认参数...
只是让你们实践下这种用法... 原帖由 iptton 于 2006-12-9 19:37 发表
他没要求你要全用默认参数...
只是让你们实践下这种用法...
定义三个Employee类对象Person1, Person2, Person3,分别用缺省构造函数、带默认形参值的构造函数,拷贝构造函数初试化。
按照字面理解应该是全默认的 全缺省与无参形式是不能共存的...
这个老师不可能不知道
通过这个你也能学会这个知道点
“歧义性”ambiguous 照我理解全缺省参数不应该存在,
除非你只有这一种 constructor
[ 本帖最后由 iptton 于 2006-12-9 20:44 编辑 ]
页:
[1]