c++ new好像有点问题

来源:百度知道 编辑:UC知道 时间:2024/06/26 00:12:58
class Workers
{
public:
//输入
void i_nw();
void i_age();
void i_name();
void i_sex();
//输出
string o_nw();
int o_age();
string o_name();
string o_sex();
string o_job();
double o_wage();
Workers():age(0),num_work(0),name(0),sex(0),job(0){};
private:
double wage;
int age;
string num_work,name,sex,job;
};

class Manager:public Workers
{
public:
void i_wage();
private:
double wage;

};

void i_manager()
{
Manager *a = new Manager;

cout << "Please enter the number of employee" << endl;
a->i_nw();
cout << "Please enter the names of employee" << endl;
a->i_name();
cout << "Please enter the age of employee" << endl;
a->i_age();
cout << "Sex selection" << endl;
a

第一、上述函数没有main(),如果i_manager()函数应该是入口;
第二、i_manager()函数中调用了Manager类的4个公有成员方法,但是4个方法都只是申明,没有实体;这4个方法如果在Manager类中写成:
void i_nw(){};
void i_age(){};
void i_name(){};
void i_sex(){};
编译就没问题了;
--------------------
关于补充问题:
首先掉用:Manager *a = new Manager;
此句时,是创建Manager类的实例,此句是简写,本应该写成:Manager *a = new Manager();创建实例的时候都会自动先调用类的默认构造函数(与类名名字的函数叫构造函数,无参数的是默认构造函数);所以在创建的时候会调用:Workers():age(0),num_work(0),name(0),sex(0),job(0){};
Workers():之后,用逗号隔开的是成员初始化;其中string num_work,name,sex,job;这几个变量是字符串类型,可是num_work(0),name(0),sex(0),job(0),意思是字符串赋值为0;字符串的值要用双引号引起来,不引就是数值,数值怎么能赋值给字符串?
所以你可以没有这个构造函数,就是不初始化成员变量;当没有构造函数时,系统会自动生成一个默认构造函数:Workers{};如果要初始化数据,应该写成:Workers():age(0),num_work("\0"),name("\0"),sex("\0"),job("\0"){};

new肯定不会有问题, 估计是你输入越界之类的

成员函数的定义代码没有给完整,不知道哪里出问题
看错误信息是读取了某个指向NULL的指针指向的对象

Manager *a = new Manager;
new之后要加上返回的指针是否为空
if(a==0)