关于类的继承

cwbcwb505 2008-01-05 11:40:42
有以下代码:(以下类中的函数都是些输入输出函数,故将其全部省略、
还有一些函数的实现也将代码部份省略,因为篇幅过大,不过不会影响
全文的大意!这是书上代码,没有语法及逻辑错误,小弟只是有些概念
不懂而已!)
class Date{
protected:
static const int dys[];
long int ndays;
public:
//....
};
这是一个日期类,他能输入日期和显示日期
class SSN{
long int ssn;
public:
//....
}
这就是一个存SSN号的类;
class Person{
pubic:
enum Sex{unknow,male,female};
enum MaritalStatus{single,married,divorced,vidowed);
protected:
string name;
string address;
string phone;
SSN ssn;
Date dob;
Sex sex;
Maritalstatus mstatus;
pubic:
//.......
};
class Employee:public Person{
protected:
Date datehired;
public:
//......
};
以上类里面只是多了个日期;
class Money{ //工资,只有一个长整型类;
double value;
public:
//......
};
class WagedEmployee:public Employee{
Money hourlywage;
public:
//......
};


string ReadString(string& prompt) //输入一个字符串并将其首地址返回;
{
//....
}

Date ReadDate(string& prompt) //输入一个日期,Date型并将其值返回;
{
//......
}

Money ReadMoney(string& prompt) //输入一个money型数据并将其返回;
{
//......
}

void PersonInput(Person* pPerson) //通过调用以上三个输入函数将pPerson指向的person类
{ //的数据成员初始化;
//.....
}

void EmployeeInPut(Employee* pEmployee) //使用以上输入函数将pEmployee指向类的数据成员
{ //初始化;
//......
}

int main()
{
Person* pPerson=0;
pPerson=new WagedEmployee;
PersonInput(pPerson);
EmployeeInput((Employee*)pPerson);
WagedEmployeeInput((WagedEmployee*)pPerson);
pPerson->FormattedDisplay(std::cout); //这上以上类上的成员函数;
delete pPerson;
return 0;
}


对于以上程序有以下几点不懂:
1、person是一个抽象基类,此程序的意思是想初始化一个WagedEmployee对象,为什
会申明一个指向person的指针呢?
2、main 函数中的pPerson=new WagedEmployee;是怎么回事呢?这个指针是指向一个
person对象的!
3、当一个基 类派生出另一个类时,这个类不是有基类所有的成员(成员函数和数据成员)
吗?且有自己独有的东西,那么这些东西在内存中是怎么分配的呢?它们是一体的?还是
分开存储的呢?如果他们是一体的,那么以上的main程序这样写不是更容易理解吗?
WagedEmployee* pPerson=0;
pPerson=new WagedEmployee;
EmployeeInput(pPerson);//这个函数适当应做修改以适应我以上的想法!

求各位大虾指点!
小弟先谢过了!
...全文
139 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
我啃 2008-01-05
  • 打赏
  • 举报
回复
1.多态,抽象基类作为接口,转成抽象基类使用其提供的相关接口规范
2.向上转型,将派生类转成基类,多态
3.派生是派生成员是成员,内存结构(或者说物件模型)参考《inside the c object model》
jixingzhong 2008-01-05
  • 打赏
  • 举报
回复
当一个基 类派生出另一个类时,这个类不是有基类所有的成员(成员函数和数据成员)
吗?且有自己独有的东西,那么这些东西在内存中是怎么分配的呢?它们是一体的?还是
分开存储的呢?如果他们是一体的,那么以上的main程序这样写不是更容易理解吗?
WagedEmployee* pPerson=0;
pPerson=new WagedEmployee;
EmployeeInput(pPerson);//这个函数适当应做修改以适应我以上的想法!
=============================================================================
所谓的 一体, 是连续的意思吧? 答案:是的。
更多细节可以看看 Inside C++ Object Model 一书,
可以让你对C++ 对象分布有非常明确、清晰的了解。

使用 WagedEmployee* pPerson=0;
还是 Person* pPerson=0;
这个有多少区别呢?
关键是 EmployeeInput 的原型,其参数类型是 Person* 还是 其他。

楼主先看看 多态 相关的知识吧
Minkey 2008-01-05
  • 打赏
  • 举报
回复
重帖?
ttkk_2007 2008-01-05
  • 打赏
  • 举报
回复
1.首先,他声明的是一个指向WagedEmployee的指针,不是Person,这么做就是为了实现多态,你现在只有WagedEmployee类,以后可能还会有AEmployee,BEmployee....
2.同1,还是为了实现多态
dingjing 2008-01-05
  • 打赏
  • 举报
回复
若如楼主的写法,用不用c++也就没有太多意义了
goodmrning 2008-01-05
  • 打赏
  • 举报
回复
对于第一个问题,初始化子类之前得先初始化它的父类.
main 函数中的pPerson=new ;是创建一个对象WagedEmployee.
这是我个人的理解.

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧