#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
class Student
{
private:
string name;
int year;
string semester;
int AmtClass;
string *CName;
static string cohort[4];
public:
Student();
Student(int AmtClass);
Student(Student &);
void setCourses(string courses[], int n);
void setName(string name);
void setYear(int year);
void setSemester(string semester);
string getName();
int getYear();
string getSemester();
int getAmtClass();
string getCohort();
string getCNames();
// ~Student();
};
string Student::cohort[4] = "";
Student::Student()
{
name = "";
year = 0;
semester = "";
AmtClass = 0;
}
//I am trying to create a dynamically allocated array of strings
Student::Student(int amount)
{
AmtClass = amount;
CName = new string[AmtClass];
}
void Student::setCourses(string courses[], int n)
{
CName[n] = courses[n];
}
Student::Student(Student &obj)
{
*this = obj;
}
void Student::setName(string Name)
{
name = Name;
}
void Student::setYear(int Year)
{
year = Year;
switch(year)
{
case 1:
cohort[0] = "Freshman";
break;
case 2:
cohort[1] = "Sophomore";
break;
case 3:
cohort[2] = "Junior";
break;
case 4:
cohort[3] = "Senior";
break;
}
}
void Student::setSemester(string Semester)
{
semester = Semester;
}
string Student::getName()
{
return name;
}
int Student::getYear()
{
return year;
}
string Student::getSemester()
{
return semester;
}
int Student::getAmtClass()
{
return AmtClass;
}
string Student::getCohort()
{
year -= 1;
return cohort[year];
}
//Returns only the first course name i entered, i want to return all
string Student::getCNames()
{
return *CName;
}
void readStudentData(Student &);
void printStudentData(Student);
int main()
{
int amount;
cout << "How many courses are you currently taking? ";
cin >> amount;
Student kid(amount);
readStudentData(kid);
printStudentData(kid);
}
void readStudentData(Student &kid)
{
cin.ignore(10000, '\n');
int amount = kid.getAmtClass();
string name = "";
string semester = "";
int year = 0;
string *pName = new string[amount];
cout << "What is your full name? ";
getline(cin,name);
kid.setName(name);
cout << "Type in 1 for Freshman, 2 for Sophomore, 3 for Junior or 4 for Senior.";
cout << "\nWhat year are you? ";
cin >> year;
while(cin)
{ if(year >=1 && year <= 4)
{
kid.setYear(year);
break;
}
else
{
cout << "Number must be between 1 and 4 Please try again." << endl;
year = 0;
cin >> year;
}
}
cin.ignore();
cout << "What is your current semester? ";
getline(cin,semester);
kid.setSemester(semester);
cout << "Please enter the name of all your courses." << endl;
for(int i = 0; i < amount; i++)
{
cout << "Course #" << i+1 << " : ";
getline(cin,pName[i]);
kid.setCourses(pName, i);
}
}
void printStudentData(Student kid)
{
Student kid2 = kid;
cout << "\nHere is your information:" << endl;
cout << "Name : " << kid2.getName() << endl;
cout << "Semester : " << kid2.getSemester() << endl;
cout << "Year : " << kid2.getCohort() << endl;
for(int i = 0; i < kid2.getAmtClass(); i++)
{
cout << "Course #" << i+1 << " : " << kid2.getCNames() << endl;
}
}
所以在这个函数中我试图创建一个程序来存储关于学生的信息。当我拿着学生的课程名称,然后将其打印出来时,我最终只输入了输入的第一个课程名称。我正在尝试打印用户输入的所有课程名称。我认为这个问题在访问者函数中。
以下是我的结果
How many courses are you currently taking? 2
What is your full name? Testing Name
Type in 1 for Freshman, 2 for Sophomore, 3 for Junior or 4 for Senior.
What year are you? 4
What is your current semester? Spring 2014
Please enter the name of all your courses.
Course #1 : C++
Course #2 : Adv C++
Here is your information:
Name : Testing Name
Semester : Spring 2014
Year : Senior
Course #1 : C++
Course #2 : C++
答案 0 :(得分:1)
您可以使用数组元素的索引作为函数getCohort
例如
string getCohort( int i ) const;
并且函数必须返回与给定索引相对应的元素,如果索引无效,则返回空字符串。
另一种方法是使用标准类std::array<std::string, 4>
并将其用作返回值。例如
class Student
{
private:
string name;
int year;
string semester;
int AmtClass;
string *CName;
std::array<std::string, 4> cohort;
//...
我删除了关键字static,因为我不明白为什么这个数据成员是静态的。
该函数可以声明为
std::array<std::string, 4> getCohort() const;
如果数据成员string *CName;
对应于课程并且您具有此类功能
void setCourses(string courses[], int n);
然后CName必须指向动态分配的数组,或者它应该是std::vector<std::string>
类型的对象
例如 std :: vector CName; //...
void setCourses( const std::string courses[], int n )
{
CName.assign( courses, courses + n );
}
或者
#include <algorithm>
//...
std::string *CName;
//...
void setCourses( const std::string courses[], int n )
{
CName = new std::string[n];
std::copy( courses, courses + n, CName );
}
在最后一种情况下,不要忘记删除指针。