#include<iostream.h>
#include<string.h>
//int gh=10;
class rs
{
protected:
char *xm;//姓名
float accumpay;//月薪总额
public:
rs();
~rs();
virtual void pay()=0;
virtual void show()=0;
};
rs::rs()
{accumpay=0.0;};
rs::~rs()
{delete[] xm;};
void rs::pay(){};
class xs:public rs//销售部类
{protected:
int yx;
float commrate;//提成百分比
float sales;//销售总额
public:
xs()
{ char xm1[8];
cout<<"请输入销售部员工的姓名 :";
cin>>xm1;
xm=new char[strlen(xm1)+1];
strcpy(xm,xm1);
yx=3000;
commrate=0.5f;};
void pay()
{ cout<<"请输入"<<xm<<"本月的销售额总额:";
cin>>sales;
accumpay=yx+commrate*sales;
};
void show()
{
cout<<"销售部员工:"<<xm<<" "<<"本月工资(底薪+销售总额*提成50%)="<<accumpay<<endl;
};
};
class kf: virtual public rs//开发部类
{protected:
float yx;//月薪
public:
kf(){
char xm1[8];
cout<<"请输入开发部经理的姓名:";
cin>>xm1;
xm=new char[strlen(xm1)+1];
strcpy(xm,xm1);
yx=10000;};
void pay(){accumpay=yx;
}
void show()
{ cout<<"开发部经理="<<xm<<" "<<"本月工资(固定工资)="<<accumpay<<endl;
};
};
class sc: virtual public rs//生产部类
{
protected:
float yx;//月薪
int scze;//生产总额
float commrate;//生产提成百分比
public:
sc()
{ char xm1[8];
cout<<"请输入生产部员工的姓名:";
cin>>xm1;
xm=new char[strlen(xm1)+1];
strcpy(xm,xm1);
yx=3000;
commrate=0.3f;
};
void pay(){
cout<<"请输入"<<xm<<"本月的生产总额:";
cin>>scze;
accumpay=yx+scze*commrate;
};
void show()
{cout<<"生产部员工="<<xm<<" "<<"本月工资(底薪+生产总额*提成30%)="<<accumpay<<endl;
};
};
class js:public kf,public sc//技术部类
{ private:
float sx;//时薪
int gs;//工时
public:
js(){ char xm1[8];
cout<<"请输入技术部员工的姓名:";
cin>>xm1;
xm=new char[strlen(xm1)+1];
strcpy(xm,xm1);
sx=200;};//时薪;
void pay()
{
cout<<"请输入"<<xm<<"本月的工作时数:";
cin>>gs;
accumpay=sx*gs;
};
void show()
{
cout<<"技术部员工="<<xm<<" "<<"本月工资(时薪*工时)="<<accumpay<<endl;
};
};
void main()
{
char i,j;
int quit=0;
do
{
cout<<"\t"<<endl;
cout<<"--------------欢迎使用苹果人员信息管理系统----------------"<<endl;
cout<<"@@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ "<<endl;
cout<<" 1------销售部 "<<endl;
cout<<" 2------开发部 "<<endl;
cout<<" 3------生产部 "<<endl;
cout<<" 4------技术部 "<<endl;
cout<<" 5------ 查询 "<<endl;
cout<<" 0------退出 "<<endl;
cout<<"@@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ "<<endl;
cout<<" 请选择菜单号:(0--5)"<<endl;
cin>>j;
switch(j)
{
case'1': {xs xs1;
xs1.pay();
xs1.show();}
break;
case'2': {kf kf1;
kf1.pay();
kf1.show();}
break;
case'3': {sc sc1;
sc1.pay();
sc1.show();}
break;
case'4': {js js1;
// js2.js1();
js1.pay();
js1.show();}
break;
case '5':{xs xs1;
kf kf1;
sc sc1;
js js1;}break;//xs1.show();kf1.show();sc1.show();js1.show();
case'0': { cout<<"您是要退出吗?是--请输入y或Y,否--请输入n或N"<<endl;
cin>>i;
if(i=='y' || i=='Y')
{quit=1;
cout<<"成功退出!"<<endl;}
else
{ quit=0;
cout<<"请继续!"<<endl;}}
break;
default: cout<<"输入错误!"<<endl;
break;
}
}while(!quit);
}
21 个解决方案
#1
派生类在构造对象时,会先调用其基类的构造函数。在析构对象时,最后会调用其基类的析构函数。在C++的书上,都会说到这个滴,妹妹看书不认真了吧?
要想知道为什么会这样,在坛子里可能很难说清楚。妹妹不妨先记住这个结论,等C++内功提升到了一定层次后,可以自行研习Inside C++ Object Model。
要想知道为什么会这样,在坛子里可能很难说清楚。妹妹不妨先记住这个结论,等C++内功提升到了一定层次后,可以自行研习Inside C++ Object Model。
#2
我如果只要调用派生类的构造函数,应该怎样解决呢?
#3
除非基类是默认构造函数
#4
这还叫面向对象/继承么?
如果是这样,类继承体系设计错了。
#5
最近也在写一个类似的管理程序,C++的类继承机制妳要先弄懂啊。
#6
哎 认真看看C++的书 类的基本知识点 都说得很清楚了
要是你上学时听过老师教C++ 那只能说你大学教你C++编程的老师 该被枪毙了
要是你上学时听过老师教C++ 那只能说你大学教你C++编程的老师 该被枪毙了
#7
初学者,看不懂
#8
派生类在构造对象时,会先调用其基类的构造函数。在析构对象时,最后会调用其基类的析构函数。这就是继承与派生,你先去看看书吧
#9
c++ primer plus(第五版)第十三章 类继承
建议您好好研读研读
建议您好好研读研读
#10
学妹的东西总是有很多人关注!
#11
我一直以为学妹是指,发帖人的学妹,从来都不帮着看!
#12
学妹的贴很多人回
#13
新手表示压力很大!
#14
基类析构函数也要虚拟,不然析构的时候要出错
#15
学妹,以你现在的C++认知 完全可以去学学VC方面的 MFC相关 向你所写的东西 在MFC中都可以很直观的体现出来 而且可以做的漂漂亮亮的 功能都能做的很全面 基本语法和纯C++类似 很好入门的
#16
如果这样的派生还能叫做派生吗?
#17
一楼正解。A类如果是B类的派生类,意思就是A类具有B类的所有“属性”,所谓构造函数就是要构造出类的“属性”,你生成A类对象的时候不让调用B类的构造函数,就相当于不让A类的对象具有某些属于B类的“属性”。现实之中可以理解为,男人类是人类的派生类,人类有身高和体重两个“属性”,男人类也继承了这两个“属性”,人类的构造函数其实就是在生成人类对象的时候初始化这两个“属性”(当然也可能有其他动作),如果男人类在生成一个男人对象的时候不调用人类的构造函数,其实就相当于这个男人对象没有初始化这两“属性”。我就是这样理解的,不知道是否恰当,仅供参考。
#18
继承问题。
派生类对象的定义时,要先调用父类的构造函数。
派生类对象的定义时,要先调用父类的构造函数。
#19
学妹的变量名设置得不好
例如xm,姓名应该用name
yx;这个月薪吗?应该用income
例如xm,姓名应该用name
yx;这个月薪吗?应该用income
#20
js(){ char xm1[8];
cout<<"请输入技术部员工的姓名:";
cin>>xm1;
xm=new char[strlen(xm1)+1];
strcpy(xm,xm1);
sx=200;};//时薪;
为什么要把这些东西写到构造函数里面呢 有违常理 不支持这样做 这些代码完全可以写到另一个函数里来调用 构造的时候就避免了 出现群主的情况。 继承是构造是由上到下的,写多了就会明白的,时间会告诉你的
cout<<"请输入技术部员工的姓名:";
cin>>xm1;
xm=new char[strlen(xm1)+1];
strcpy(xm,xm1);
sx=200;};//时薪;
为什么要把这些东西写到构造函数里面呢 有违常理 不支持这样做 这些代码完全可以写到另一个函数里来调用 构造的时候就避免了 出现群主的情况。 继承是构造是由上到下的,写多了就会明白的,时间会告诉你的
#21
看到贴后,感到鸭梨很大
#1
派生类在构造对象时,会先调用其基类的构造函数。在析构对象时,最后会调用其基类的析构函数。在C++的书上,都会说到这个滴,妹妹看书不认真了吧?
要想知道为什么会这样,在坛子里可能很难说清楚。妹妹不妨先记住这个结论,等C++内功提升到了一定层次后,可以自行研习Inside C++ Object Model。
要想知道为什么会这样,在坛子里可能很难说清楚。妹妹不妨先记住这个结论,等C++内功提升到了一定层次后,可以自行研习Inside C++ Object Model。
#2
我如果只要调用派生类的构造函数,应该怎样解决呢?
#3
除非基类是默认构造函数
#4
这还叫面向对象/继承么?
如果是这样,类继承体系设计错了。
#5
最近也在写一个类似的管理程序,C++的类继承机制妳要先弄懂啊。
#6
哎 认真看看C++的书 类的基本知识点 都说得很清楚了
要是你上学时听过老师教C++ 那只能说你大学教你C++编程的老师 该被枪毙了
要是你上学时听过老师教C++ 那只能说你大学教你C++编程的老师 该被枪毙了
#7
初学者,看不懂
#8
派生类在构造对象时,会先调用其基类的构造函数。在析构对象时,最后会调用其基类的析构函数。这就是继承与派生,你先去看看书吧
#9
c++ primer plus(第五版)第十三章 类继承
建议您好好研读研读
建议您好好研读研读
#10
学妹的东西总是有很多人关注!
#11
我一直以为学妹是指,发帖人的学妹,从来都不帮着看!
#12
学妹的贴很多人回
#13
新手表示压力很大!
#14
基类析构函数也要虚拟,不然析构的时候要出错
#15
学妹,以你现在的C++认知 完全可以去学学VC方面的 MFC相关 向你所写的东西 在MFC中都可以很直观的体现出来 而且可以做的漂漂亮亮的 功能都能做的很全面 基本语法和纯C++类似 很好入门的
#16
如果这样的派生还能叫做派生吗?
#17
一楼正解。A类如果是B类的派生类,意思就是A类具有B类的所有“属性”,所谓构造函数就是要构造出类的“属性”,你生成A类对象的时候不让调用B类的构造函数,就相当于不让A类的对象具有某些属于B类的“属性”。现实之中可以理解为,男人类是人类的派生类,人类有身高和体重两个“属性”,男人类也继承了这两个“属性”,人类的构造函数其实就是在生成人类对象的时候初始化这两个“属性”(当然也可能有其他动作),如果男人类在生成一个男人对象的时候不调用人类的构造函数,其实就相当于这个男人对象没有初始化这两“属性”。我就是这样理解的,不知道是否恰当,仅供参考。
#18
继承问题。
派生类对象的定义时,要先调用父类的构造函数。
派生类对象的定义时,要先调用父类的构造函数。
#19
学妹的变量名设置得不好
例如xm,姓名应该用name
yx;这个月薪吗?应该用income
例如xm,姓名应该用name
yx;这个月薪吗?应该用income
#20
js(){ char xm1[8];
cout<<"请输入技术部员工的姓名:";
cin>>xm1;
xm=new char[strlen(xm1)+1];
strcpy(xm,xm1);
sx=200;};//时薪;
为什么要把这些东西写到构造函数里面呢 有违常理 不支持这样做 这些代码完全可以写到另一个函数里来调用 构造的时候就避免了 出现群主的情况。 继承是构造是由上到下的,写多了就会明白的,时间会告诉你的
cout<<"请输入技术部员工的姓名:";
cin>>xm1;
xm=new char[strlen(xm1)+1];
strcpy(xm,xm1);
sx=200;};//时薪;
为什么要把这些东西写到构造函数里面呢 有违常理 不支持这样做 这些代码完全可以写到另一个函数里来调用 构造的时候就避免了 出现群主的情况。 继承是构造是由上到下的,写多了就会明白的,时间会告诉你的
#21
看到贴后,感到鸭梨很大