大侠,看一下这个程序的错误怎么改正

来源:百度知道 编辑:UC知道 时间:2024/05/26 21:43:31
大侠,看一下这个程序的错误怎么改正,
悬赏分:10 - 离问题结束还有 8 天 18 小时
出现(:\资料库\c++ 程序\12\12.cpp(23) : error C2248: 'id' : cannot access private member declared in class 'staff',see declaration of 'id')之类的错误
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
class staff
{
public:
staff(int Id,int Age,char *Sex,char *Name){}
private:
int id,age;
char sex[10],name[30];
};
class staff2:public staff
{
public:
staff2();
staff2(int Id,int Age,char *Sex,char *Name);
void display();
void priter();
};
staff2::staff2(int Id,int Age,char *Sex,char *Name):staff(Id, Age,Sex,Name)
{
id=Id;
age=Age;
strcpy(sex,Sex);
strcpy(name,Name);
}
staff2::staff2()
{
cout<<"请输入员工信息:id age sex name "<<endl;
cin>>id>>age>>

你这里面staff2公有继承staff,但是没有新的操作添加进来,没有什么意义,,在类staff2的实现里面你写了两个构造函数,一个是必须添加的构造函数,另一个是默认构造函数,但是你的默认构造函数是有错误的,
默认构造函数的写法为staff2(staff2 &p);
另外:
staff2::staff2(int Id,int Age,char *Sex,char *Name):staff(Id, Age,Sex,Name)
{
id=Id;
age=Age;
strcpy(sex,Sex);
strcpy(name,Name);
}
这个函数里面的id,age,sex,name,你的想法是继承staff而来,但是它不能这样赋值,因为根本看不到,这个是在基类函数里面赋值的,所以你应该把它放在staff类的构造函数里面.
staff2::staff2()
{
cout<<"请输入员工信息:id age sex name "<<endl;
cin>>id>>age>>sex>>name;
}
这个函数你是把它当成了默认构造函数来写,根本就不合法,
所以编译通不过才是必然.
void staff2::display()
{
cout<<"id="<<id<<setw(5)<<"age="<<age<<setw(5)<<"sex="<<sex
<<setw(5)<<"name="<<name<<endl;
}
这个函数输出的全是继承自基类staff的成员数据,直接这样写肯定无法输出,建议你直接将这个函数放在基类的实现里面,如果你一定要在子类staff2里面实现,你试试以一个staff2类的对象或指针为参