问大家一个很基本的问题
时间:2011-12-27
来源:互联网
C/C++ code
这个是一个有关继承的问题:
第一个是这里 Singerwaiter(){} 我可以改成这样不Singerwaiter():Worker(),Waiter(),Singer(){}
第二个是:Worker类是一个纯基类,这条代码:Waiter(const Worker & s, int n):Worker(s),banache(n){}
是不是要用Worker的复制构造函数然后在把临时对象复制给Waiter的基类部分,这样解释正确不。
第三个:Singerwaiter(const Waiter & s,int k):Worker(s),Waiter(s),Singer(s,k){}这个代码,形参是Waiter的引用,
对于Worker,因为可以隐式向下传递,所以Worker可以用复制构造函数构造Worker的私有数据,
对于Singer(s,k)也可以用Waiter的引用来构造??请高手用教科书式的回答来指点下我,我正在学代码重用这章。有点糊涂了。
#ifndef WORKERMI_H_ #define WORKERMI_H_ #include <string> class Worker { private: std::string fullname; long id; protected: virtual void date()const; virtual void get(); public: Worker():fullname("no name",),id(0L){} Worker(const std::string & s, long n):fullname(s), ld(n){} virtual Worker~(){} = 0; virtual void set() = 0; virtual void show()const = 0; }; class Waiter:virtual public Worker { private: int banache; protected: virtual void date()const; virtual void get(); public: Waiter():Worker(),banache(0){} Waiter(const std::string & s, long n, int i):Worker(s,n),banache(0){} Waiter(const Worker & s, int n):Worker(s),banache(n){} virtual ~Waiter(){} virtual void set(); virtual void show()const; }; class Singer:virtual public Worker { protected: enmu {other, alto, contralto, soprano, bass, baritone,tenor}; enum {vtypes = 7}; void date()const; void get(); private: static char *pv[vtypes]; int voice; public: Singer():Worker(),voice(other){} Singer(const std::string & s,long n, int i= other):Worker(s, n),voice(i){} Singer(const Worker & s, int i = other):Worker(s),voice(i){} void set(); void show()const }; class Singerwaiter:public Waiter, public Singer { protected: void get(); void date(); public: Singerwaiter(){} Singerwaiter(const std::string & s, long n, int i,int k) :Worker(s,n),Waiter(s,n,i),Singer(s,n,k){} Singerwaiter(const Worker & s,int i,int k):Work(s),Waiter(s,n),Singer(s,k){} Singerwaiter(const Waiter & s,int k):Worker(s),Waiter(s),Singer(s,k){} Singerwaiter(const Singer & s,int i):Worker(s),Waiter(s,i),Singer(s){} void set(); void show()const; }; #endif
这个是一个有关继承的问题:
第一个是这里 Singerwaiter(){} 我可以改成这样不Singerwaiter():Worker(),Waiter(),Singer(){}
第二个是:Worker类是一个纯基类,这条代码:Waiter(const Worker & s, int n):Worker(s),banache(n){}
是不是要用Worker的复制构造函数然后在把临时对象复制给Waiter的基类部分,这样解释正确不。
第三个:Singerwaiter(const Waiter & s,int k):Worker(s),Waiter(s),Singer(s,k){}这个代码,形参是Waiter的引用,
对于Worker,因为可以隐式向下传递,所以Worker可以用复制构造函数构造Worker的私有数据,
对于Singer(s,k)也可以用Waiter的引用来构造??请高手用教科书式的回答来指点下我,我正在学代码重用这章。有点糊涂了。
作者: zjxzjx54 发布时间: 2011-12-27
第一是可以的,不过编译器自己就会这么做,所以你初步初始化一样的~
第二个可以这么理解,其实理解为Worker参数用来初始化Worker部分更好~
第三个Singer(const Worker & s, int i = other):Worker(s),voice(i){}
第二个可以这么理解,其实理解为Worker参数用来初始化Worker部分更好~
第三个Singer(const Worker & s, int i = other):Worker(s),voice(i){}
作者: dyangrun 发布时间: 2011-12-27
第一是可以的,不过编译器自己就会这么做,所以你初步初始化一样的~
第二个可以这么理解,其实理解为Worker参数用来初始化Worker部分更好~
第三个Singer(const Worker & s, int i = other):Worker(s),voice(i){}
第二个可以这么理解,其实理解为Worker参数用来初始化Worker部分更好~
第三个Singer(const Worker & s, int i = other):Worker(s),voice(i){}
作者: dyangrun 发布时间: 2011-12-27
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28