第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限制。此函数经常用在函数调用时用户定义类型的值传递及返回。拷贝构造函数要调用基类的拷贝构造函数和成员函数。如果可以的话,它将用常量方式调用,另外,也可以用非常量方式调用。

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

相关文章推荐

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

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

11周3-2项目-警察和厨师为Polic类和Cook类增加了对象成员,请扩充代码

问题及代码: /* *Copyright (c) 2016,烟台大学计算机学院 *All rights reserved. *文件名称:main.cpp *作 者:李磊涛 *完成时间:2016...

第十周项目3——警察与厨师2

问题及代码: /*copyright(c)2016.烟台大学计算机学院 * All rights reserved, * 文件名称:text.Cpp * 作者:李一波 * 完成日期:20...

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

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

第10.11周项目3-警察和厨师(2)

代码: /* *Copyright (c) 2016, 烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:main.cpp; *作 者:岳成艳2016年5月1...

第十周第十一周上机实践项目-项目3-2-警察和厨师

/*copyright(c)2016.烟台大学计算机学院 * All rights reserved, * 文件名称:text.Cpp * 作者:刘涛 * 完成日期:2016年5月7日 * ...

第十一周上机实践项目——项目3-警察和厨师-(2)

/* *Copyright (c)2016,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:main.cpp *作 者:郭永恒 *完成日期:201...

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

问题描述及代码: /* *copyright (c) 2016,烟台大学计算机学院 *All rights reserved. *文件名称:hellow.cpp *作者:田甜 *完成日期:2016年...

第十周项目3 警察和厨师继承组合类

/* *Copyright(c) 2016,烟台大学计算机学院 *作 者:刘金石 *完成日期:2016年5月3日 *问题描述:警察和厨师 *...

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

/* *Copyright(c) 2016, 烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:main.cpp *作 者:张珩瑞 *完成...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第11周项目3-警察与厨师 (2)
举报原因:
原因补充:

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