C ++类和对象创建

时间:2013-10-11 20:16:58

标签: c++ class

我根据我的理解创建了这个类,但它提供了许多错误,我正在尝试做的是创建一个雇员类,并基本上学会了如何使用它来创建和操作对象。任何帮助是极大的赞赏。 :)

#include <iostream>
#include <string>

using namespace std;

    class employeeClass
    {
private:
    int emplNumber;
    string empName;
    string stAddress;
    string phoneNumber;
    double hourlyWage;
    double hoursWorked;
public:
    employeeClass();//not parametized constructor
    employeeClass(int, string, string, string, double, double);
         ~employeeClass();//destructor to release memory if object assigned dynamic memory

    void setEmpnumber();
    int getEmpnumber();

    void setEmpname();
    string getEmpname();

    void setstAddress();
    string getstAddress();

    void setphoneNumber();
    string getphoneNumber();

    void setHourlywage();
    double getHourlywage();

    void sethoursWorked();
    double gethoursWorked();

     employeeClass::employeeClass()
     {
         int emplNumber;
         string empName;
         string stAddress;
         string phoneNumber;
         double hourlyWage = 0;
         double hoursWorked = 0;
     }
     employeeClass::employeeClass(int a, string b, string c, string d, double e,     double f)
     {
         emplNumber=a;
         empName=b;
         stAddress=c;
         phoneNumber=d;
         hourlyWage=e;
         hoursWorked=f;
     }
     void employeeClass::setEmpnumber(int a)
     {
         emplNumber=a;
     }
     int employeeClass::getEmpnumber()
     {
         return emplNumber;
     }
     void employeeClass::setEmpname(string b)
     {
         empName=b;
     }
     string employeeClass::getEmpname()
     {
         return emplNumber;
     }
     void employeeClass::setstAddress(string c)
     {
         stAddress=c;
     }
     string employeeClass::getstAddress()
     {
         return stAddress;
     }
     void employeeClass::setphoneNumber(string d)
     {
         phoneNumber=d;
     }
     string employeeClass::getphoneNumber()
     {
         return phoneNumber;
     }
     void employeeClass::setHourlywage(double e)
     {
         hourlyWage=e;
     }
     double employeeClass::getHourlywage()
     {
         return hourlyWage;
     }
     void employeeClass::sethoursWorked(double f)
     {
         hoursWorked=f;
     }
     double employeeClass::gethoursWorked()
     {

         return hoursWorked;
     }
};

int main ()
{
employeeClass gama, tito;
gama.setEmpname("Gamaliel tellez");
gama.setphoneNumber("8018839494");
gama.setEmpnumber('12');
gama.setHourlywage('345');
gama.sethoursWorked('23');


cout<<"Employee info: "<<endl;
cout<<"Name: "<<gama.getEmpname<<endl;
cout<<"Phone number: "<<gama.getphoneNumber<<endl;
cout<<"Emp number: "<<gama.getEmpnumber<<endl;
cout<<"Hourly wage: $"<<gama.getHourlywage<<endl;
cout<<"Hours worked: "<<gama.gethoursWorked<<endl;


system ("PAUSE");
return 0;

}

4 个答案:

答案 0 :(得分:2)

你在同一个类中创建了方法原型和实现。你应该将它们分开。您的.h文件应包含:

class employeeClass
    {
private:
    int emplNumber;
    string empName;
    string stAddress;
    string phoneNumber;
    double hourlyWage;
    double hoursWorked;
public:
    employeeClass();//not parametized constructor
    employeeClass(int, string, string, string, double, double);
         ~employeeClass();//destructor to release memory if object assigned dynamic memory

    void setEmpnumber();
    int getEmpnumber();

    void setEmpname();
    string getEmpname();

    void setstAddress();
    string getstAddress();

    void setphoneNumber();
    string getphoneNumber();

    void setHourlywage();
    double getHourlywage();

    void sethoursWorked();
    double gethoursWorked();
};

所有的实现都应该放在单独的.cpp文件中,因为你需要包含头文件和实现方法,它应该是这样的:

void employeeClass::setEmpnumber(int a)
{
    emplNumber=a;
}

有一种方法可以让它在标题中包含所有内容,但最好分开,因为头文件中的更改是重新编译所有内容的信号,因此分离是节省时间。


同样在你的main()中,所有方法都必须在末尾有括号,如果有参数传递与否则无关紧要,所以你需要更改

cout<<"Name: "<<gama.getEmpname<<endl;

cout<<"Name: "<<gama.getEmpname()<<endl;

等等。

顺便说一句。这不是错误,而是建议,不要在全局范围内使用using,后者则会处理更大的项目using可能会造成很多混乱,所以最好使用std::string,{ {1}}依旧......

另外,您可能在std::cout上看到了C/C++的新内容,如果您有更多相互包含的标题,那么标题也需要它。

答案 1 :(得分:2)

有几件事:

首先,以employeeClass::开头的任何内容都是一个实现,您应该将它们移出类定义之外。建议使用声明和带有imlement的.cpp文件编写.h文件。

其次,您的声明还应包含参数,例如,void setEmpname();应该变为无效void setEmpname(string b);

您也错过了析构函数的实现。它会像employeeClass::~employeeClass(){}

每次调用函数时,即使它没有参数,也应该使用括号。例如,在main中,gama.getEmpname变为gama.getEmpname()

建议不要使用system ("PAUSE");,但如果您想使用它,则应添加#include <cstdlib>

此外,虽然using namespace std;不会导致像这样的小代码片段出现任何问题,但它可能会导致与使用大量库的大型项目发生冲突。很高兴意识到这一点。

下面列出了包含这些更正的代码的工作版本:

#include <iostream>
#include <string>
#include <cstdlib>

using namespace std;

class employeeClass {
private:
    int emplNumber;
    string empName;
    string stAddress;
    string phoneNumber;
    double hourlyWage;
    double hoursWorked;
public:
    employeeClass();//not parametized constructor
    employeeClass(int, string, string, string, double, double);
    ~employeeClass();//destructor to release memory if object assigned dynamic memory

    void setEmpnumber(int a);
    int getEmpnumber();

    void setEmpname(string b);
    string getEmpname();

    void setstAddress(string c);
    string getstAddress();

    void setphoneNumber(string d);
    string getphoneNumber();

    void setHourlywage(double e);
    double getHourlywage();

    void sethoursWorked(double f);
    double gethoursWorked();


};
employeeClass::employeeClass() {
    int emplNumber;
    string empName;
    string stAddress;
    string phoneNumber;
    double hourlyWage = 0;
    double hoursWorked = 0;
}
employeeClass::employeeClass(int a, string b, string c, string d, double e,     double f) {
    emplNumber=a;
    empName=b;
    stAddress=c;
    phoneNumber=d;
    hourlyWage=e;
    hoursWorked=f;
}
employeeClass::~employeeClass() {}
void employeeClass::setEmpnumber(int a) {
    emplNumber=a;
}
int employeeClass::getEmpnumber() {
    return emplNumber;
}
void employeeClass::setEmpname(string b) {
    empName=b;
}
string employeeClass::getEmpname() {
    return empName;
}
void employeeClass::setstAddress(string c) {
    stAddress=c;
}
string employeeClass::getstAddress() {
    return stAddress;
}
void employeeClass::setphoneNumber(string d) {
    phoneNumber=d;
}
string employeeClass::getphoneNumber() {
    return phoneNumber;
}
void employeeClass::setHourlywage(double e) {
    hourlyWage=e;
}
double employeeClass::getHourlywage() {
    return hourlyWage;
}
void employeeClass::sethoursWorked(double f) {
    hoursWorked=f;
}
double employeeClass::gethoursWorked() {

    return hoursWorked;
}
int main () {
    employeeClass gama, tito;
    gama.setEmpname("Gamaliel tellez");
    gama.setphoneNumber("8018839494");
    gama.setEmpnumber('12');
    gama.setHourlywage('345');
    gama.sethoursWorked('23');


    cout<<"Employee info: "<<endl;
    cout<<"Name: "<<gama.getEmpname()<<endl;
    cout<<"Phone number: "<<gama.getphoneNumber()<<endl;
    cout<<"Emp number: "<<gama.getEmpnumber()<<endl;
    cout<<"Hourly wage: $"<<gama.getHourlywage()<<endl;
    cout<<"Hours worked: "<<gama.gethoursWorked()<<endl;


    system ("PAUSE");
    return 0;

}

答案 2 :(得分:1)

让您的类的定义仅包含声明,例如:

public:
    void setEmpnumber(int);

这些成员的实施,例如:

void employeeClass::setEmpnumber(int a)
{
    emplNumber=a;
}

应放在class之外。另请注意,在调用这些方法时您缺少()

cout<<"Emp number: "<<gama.getEmpnumber()<<endl;
                                       ^^

答案 3 :(得分:1)

void employeeClass::setEmpnumber(int a)
//   ^^^^^^^^^^^^^^^

当您在课堂上 之外

时,您正在课堂上对您的方法进行资格认定。

您还需要使用()来调用您的方法:

cout << "Name: "         << gama.getEmpname()     << endl;
cout << "Phone number: " << gama.getphoneNumber() << endl;
cout << "Emp number: "   << gama.getEmpnumber()   << endl;
cout << "Hourly wage: $" << gama.getHourlywage()  << endl;
cout << "Hours worked: " << gama.gethoursWorked() << endl;