回 帖 发 新 帖 刷新版面

主题:[讨论]求助对象指针和类的三个问题

先发下头文件的main()的代码

[code=c]
//    employee.h

class employee
{
protected:
    int individualEmpNo;    //个人编号
    int grade;                //级别
    float accumPay;            //月薪
public:
    employee(){                                //构造函数
            individualEmpNo = 1000;        //员工编号目前最大为 1000
            grade = 1;                    //级别初值为 1
            accumPay = 0.0;                //月薪总额初值为 0
    }
    ~employee();                            //析构函数
    void IncreaseEmpNo(int);                //增加编号函数
    void promote(int);                        //升级函数
    void SetaccumPay(float grade = 1000.0);    //设置月薪函数
    int GetindividualEmpNo();                //提取编号函数
    int Getgrade();                            //提取级别函数
    float GetaccumPay();                    //提取月薪函数
};

employee::~employee(){}

void employee::IncreaseEmpNo(int steps)
{    individualEmpNo += steps;}

void employee::promote(int  increment)
{    grade += increment;}

void employee::SetaccumPay(float pa)
{    accumPay = pa;}

int employee::GetindividualEmpNo()
{    return individualEmpNo;}

int employee::Getgrade()
{    return grade;}

float employee::GetaccumPay()
{    return accumPay;}[/code]

问题一:为什么把这个头文件中的构造函数写在类的外面不行呢?环境是VS2010.
例如在类里面声明了employee();
在类外面加上:
[code=c]
employee::employee()(
    individualEmpNo = 1000;        //员工编号目前最大为 1000
    grade = 1;                    //级别初值为 1
    accumPay = 0.0;                //月薪总额初值为 0
)
[/code]

[code=c]
//    main.cpp

#include <iostream>
#include <stdlib.h>
#include "employee.h"
using namespace std;

#define OK                0
#define ERROR            -1
#define INITNUM            1
#define INCREMENTNUM    1

int main()
{
    employee *m;
    int i, num = -1;
    char c = 'y'; float pa;
    m = (employee *)malloc(INITNUM * sizeof(employee));
    if(!m) return OVERFLOW;

    while (c == 'y'){
        num++;
        if(num >= sizeof(*m)){
            m = (employee *)realloc(m, (num + INCREMENTNUM) * sizeof(employee));
            if(!m) return OVERFLOW;
        }
        cout << "请输入一个雇员的级别: ";
        cin >> pa; (*m + num).grade = pa;
        (*m + num).IncreaseEmpNo(i);
        (*m + num).SetaccumPay();
        cout << "按'y'键继续输入,其他任意键退出!" << endl;
        cin >> c;
    }
}[/code]

问题二:可否使用对象指针?如果可以,为什么编译时提示error C2784
问题三:如果可以使用对象指针,怎样判断为指针分配的内存空间已满然后用realloc()函数重新分配?主要是怎么判断。
希望高手解答

回复列表 (共3个回复)

沙发

你的本意(*m + num)这是什么?

板凳

employee 是一个类
employee *m;
这样的话m不就是一个对象的指针吗?
那么(*m + num)是不是就是根据序号num访问对象数组m?

3 楼


第一个问题是没有错的,看看是不是你写错了,
employee::employee(){                                //构造函数
    individualEmpNo = 1000;        //员工编号目前最大为 1000
    grade = 1;                    //级别初值为 1
    accumPay = 0.0;                //月薪总额初值为 0
    }
你的好像是把{}写成()了。
(*m + num).SetaccumPay();在这里应写成(m+num)->SetaccumPay()

我来回复

您尚未登录,请登录后再回复。点此登录或注册