YOLO!

You only live once .

第11周项目3-警察与厨师 (2)
/*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限制。此函数经常用在函数调用时用户定义类型的值传递及返回。拷贝构造函数要调用基类的拷贝构造函数和成员函数。如果可以的话,它将用常量方式调用,另外,也可以用非常量方式调用。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/j19961113/article/details/51563500
个人分类: c++
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

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

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭