我是班级的新手,我一直在尝试创建这个简单的类代码,但每次出现错误。当我没有使用私有访问说明符时,它工作正常,但我想练习如何使用私有。你能告诉我出了什么问题吗?
#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;
}
答案 0 :(得分:2)
在您的主要功能中,您正试图访问班级的name
和ID
成员。哪些是私有的......因为你不在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
};