本文共 1432 字,大约阅读时间需要 4 分钟。
【项目-警察和厨师】
(1)根据下面的类图,定义各个类:[参考解答1]
#includeusing namespace std;class Person{public: Person(int, string); void action(); string getName() { return name; }private: int age; string name;};Person::Person(int a, string n):age(a), name(n) {}void Person::action(){ cout< <<" do some action"<
(2)下面的类图,为Polic类和Cook类增加了对象成员,请扩充代码,完成上述各项要求
#includeusing namespace std;class Person{public: Person(int, string); void action(); string getName() { return name; }private: int age; string name;};Person::Person(int a, string n):age(a), name(n) {}void Person::action(){ cout< <<" do some action"<
评价:
- 这些代码是完成是题目的要求,但是,并不好。 - 每个构造函数带上一长串的参数,难写,难看,这本身就是质量问题。 - 这种写法,也根本未体现对象的“封装”——都是一串散乱的基本类型数据在工作。 - 我们希望看到jack警察的上司就是一个人,john厨师的保卫者,就是一个警察。 - 需要做的是,利用对象作为构造函数的参数,使结构清晰。 - 当然,这时需要增加相关的复制构造函数了。
[参考解答2]
#includeusing namespace std;class Person{public: Person(int, string); void action(); string getName() { return name; }private: int age; string name;};Person::Person(int a, string n):age(a), name(n) {}void Person::action(){ cout< <<" do some action"<
评论:
这样做,是不是在逻辑上很清楚了? Person、Police类中该定义复制构造函数,在这里没有写,用其默认复制构造函数了。相关类中没有定义指针型成员,不必要深复制,所以,可以使用默认复制构造函数。