私有成员的类..这段代码有什么问题?

时间:2015-02-13 13:43:16

标签: c++ class object

我是班级的新手,我一直在尝试创建这个简单的类代码,但每次出现错误。当我没有使用私有访问说明符时,它工作正常,但我想练习如何使用私有。你能告诉我出了什么问题吗?

#include <iostream>
#include <string>

using namespace std;

class Student
{
private:
    string name;
    int ID;
public:
    void setName(string);
    string getName();

    void setID(int);
    int getID();
};

void Student::setName(string n)
{
    name=n;
}

string Student::getName()
{
    cout<<name;
    return name;
}

void Student::setID(int i)
{
    ID=i;
}

int Student::getID()
{
    cout<<ID;
    return ID;
}

int main ()
{
    Student S;

    cout<<"Enter Student name: ";
    cin>>S.name;
    cout<<"Enter students ID: ";
    cin>>S.ID;

    cout<<"The student's name is "<< S.name<<endl;
    cout<<"The student's ID is "<< S.ID<<endl;

    return 0;
}

3 个答案:

答案 0 :(得分:2)

在您的主要功能中,您正试图访问班级的nameID成员。哪些是私有的......因为你不在class Student的范围内,编译器会对你大喊大叫。

你应该这样做(因为你已经实现了setter和getter):

int ID(0);
std::string name;
std::cin >> name;
S.setName(name);
std::cin >> ID;
S.setID(ID);

答案 1 :(得分:0)

您必须使用setter / getters访问您的私人字段才能设置或检索其值,您无法将其与class dot notation一起使用,因为它们是私有的,您只能访问它们使用公共方法

答案 2 :(得分:0)

错误:您正在访问私有成员而不使用类成员函数(在类范围之外)。

当您希望保护值不受控制的访问时,私有成员非常有用。就像修改值必须经过某种验证(将在类函数中实现)一样。

在您的代码中,您确保名称和ID是私有的,这意味着只能使用类函数(如构造函数或getter和setter)访问它们。

如果您愿意,可以创建一个名为教室的课程(包含许多学生,存储在矢量中)。

在该课程中,您可以确定,与添加学生时相比,它的ID会自动生成,并且不等于任何其他ID。在这种情况下,将学生向量设为私有是很重要的,因为它需要某种验证。

    class Student
{
private: // anything that wants to access members below
        //  this must be defined as a class member, or the equivalent
    string name; 
    int ID;
public:
    void setName(string); // can access private members
    string getName(); // can access private members.... should be const

    void setID(int); // can access private members
    int getID(); // can access private members, should be const
};