第11周项目3-警察与厨师 (2)

原创 2016年06月02日 08:52:24
/*Copyright (c) 2016, 烟台大学计算机学院                 
*All rights reserved.                 
*文件名称:c8weeks.cpp                 
*作者:张天择                
*完成日期:2016年 6月2日                 
*版本号:vc++6.0                 
*/  

#include <iostream>
using 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<<name<<" do some action"<<endl;
}
class Police: public Person
{
public:
    Police(int a, string n, int l, Person);
    void arrest(Person);
    void show();
private:
    int level; //级别
    Person leader;  //领导
};
Police::Police(int a, string n, int l, Person p):Person(a,n),level(l),leader(p) {}
void Police::arrest(Person p)
{
    cout<<"Police "<<getName()<<" arrest " <<p.getName()<<endl;
}
void Police::show()
{
    cout<<"Police "<<getName()<<", leader is " <<leader.getName()<<endl;
}

class Cook: public Person
{
public:
    Cook(int a, string n, double s,Police p);
    void getCake(int);
    void show();
private:
    double salary; //薪水
    Police protector;  //厨师小店的片区警察
};
Cook::Cook(int a, string n, double s,Police p):
    Person(a,n),salary(s),protector(p) {}
void Cook::getCake(int n)
{
    cout<<"Cook "<<getName()<<" gave me " <<n<<" cakes."<<endl;
}
void Cook::show()
{
    cout<<"Cook "<<getName()<<" is protected by Police "<<protector.getName()<<endl;
}

int main()
{
    Person jerry(43,"Jerry");
    Police jack(30,"Jack",2,jerry);
    Cook john(24,"John",5000,jack);
    jack.show();
    john.show();
    return 0;
}

C++默认的复制构造函数是怎么走的?

这是因为类有一个默认的赋值操作符,虽然你没写,编译器已经为你自动生成了,大概如下:
A& operator=(A& a)
{
this->XXX = a.XXX; //把a的成员变量值都拷贝给这个对象的成员变量
....
return *this;
}

ps.如果你的类里面有指针成员变量,你就必须重写拷贝构造函数和赋值操作符。因为你不重写的话,就会调用默认的拷贝构造函数和赋值操作符,而默认的是成员变量按位拷贝,所以就会导致两个类对象的指针变量同时指向一块内存。

(2)

复制构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构建及初始化。其唯一的形参必须是引用,但并不限制为const,一般普遍的会加上const限制。此函数经常用在函数调用时用户定义类型的值传递及返回。拷贝构造函数要调用基类的拷贝构造函数和成员函数。如果可以的话,它将用常量方式调用,另外,也可以用非常量方式调用。

版权声明:本文为博主原创文章,未经博主允许不得转载。

第11周项目3-警察与厨师(2)

/* All rights reserced. 文件名称:main.cpp 作者:李鑫  完成日期:2016.5.17 问题描述:为类A增加复制构造函数,用下面的main函数测试 int main(...
  • lx201558504102
  • lx201558504102
  • 2016年05月27日 17:06
  • 153

第10、11周项目3-警察和厨师(2)

问题及代码: 图片要求: /* *copyright (t) 2016,烟台大学计算机学院 *All rights reserved. *文件名称:test.cpp *作者:张晴晴 *完...
  • qq_34216631
  • qq_34216631
  • 2016年05月17日 16:48
  • 200

第10、11周项目3-警察与厨师(1)

问题及代码: /* *copyright (t) 2016,烟台大学计算机学院 *All rights reserved. *文件名称:test.cpp *作者:张晴晴 *完成日期:2016...
  • qq_34216631
  • qq_34216631
  • 2016年05月17日 15:00
  • 353

第10、11周项目3-警察与厨师(3)

问题及代码: /* *copyright (t) 2016,烟台大学计算机学院 *All rights reserved. *文件名称:test.cpp *作者:张晴晴 *完成日期:201...
  • qq_34216631
  • qq_34216631
  • 2016年05月17日 17:38
  • 144

第11周项目3-警察与厨师(1)

 /* All rights reserced. 文件名称:main.cpp 作者:李鑫  完成日期:2016.5.27 问题描述 :根据下面的类图,定义各个类: 要求: ...
  • lx201558504102
  • lx201558504102
  • 2016年05月27日 16:46
  • 382

第11周项目3-警察与厨师 (1)

/*Copyright (c) 2016, 烟台大学计算机学院 *All rights reserved. *文件名称:c8we...
  • j19961113
  • j19961113
  • 2016年06月02日 08:32
  • 122

第10、11周项目3 警察和厨师(2)

/* *copyright(c) 2016,烟台大学计算机与控制工程学院 *All rights reserved *文件名称:test.cpp *作者:李硕 *版本:Code::Block...
  • LiShuoQAQ
  • LiShuoQAQ
  • 2016年05月14日 12:21
  • 209

第十一周【项目3- 警察和厨师2】

/* *Copyright(c) 2016, 烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:main.cpp *作 者:张珩瑞 *完成日期:20...
  • qq_33450452
  • qq_33450452
  • 2016年05月15日 21:28
  • 429

第10、11周项目3:警察和厨师(2)

/* * Copyright(c)2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:第10、11周项目3:警察和厨师(2) * 作者:于子娴 ...
  • CiMaoShuShu
  • CiMaoShuShu
  • 2016年05月11日 20:46
  • 109

第10、 11周-【项目-警察和厨师】

问题及代码: /*copyright 计算机与控制工程学院 完成日期:2016年5月8日 作者:马艳艳 问题描述:各个成员函数,只要输出相关的信息即可,暂不深究其业务功能 请为各个类增加构造函数 ...
  • qq_33267291
  • qq_33267291
  • 2016年05月08日 13:24
  • 524
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第11周项目3-警察与厨师 (2)
举报原因:
原因补充:

(最多只允许输入30个字)