我正在制作一个表面,让用户输入信息并打印出来。
这就是它的样子。
main <- menu <- Reservation
<- BookingManager <- BookingRecord
我创建了一个 vector
vector<string> CompanyName
在预订中,这是
outputdataInfo()
添加公司名称,void Reservation::outputdataInfo()
{
string CompName;
cout << "Company Name <-" << endl;
cin >> CompName;
Reservation::setCompanyName(string (CompName) );
cout << CompanyName.at(0) << endl;
// Use for test and it works
cout << CompanyName.size() << endl;
// Use for test and it works
cout << "End of Reservation, thank you." << endl;
}
CompanyName 的设置者:(工作)
void Reservation::setCompanyName(const string& cn)
{this->CompanyName.push_back(cn);}
但是现在
BookingRecord::outputdataInfo()
想打印预订记录。void BookingRecord::outputdataInfo()
{
cout << " ----- Booking Record -----" << endl;
Reservation::printBookingRecord();
}
我这样写(不确定这是否正确):
void Reservation::printBookingRecord() {
for (int i = 0; i < CompanyName.size(); i++) {
cout << " ---- Company ---- " << endl;
cout << "Name: " << CompanyName.at(i) << endl;
}
}
但是 CompanyName 突然看起来好像什么都忘记了,或者像重置了大小。
结果是
BookingRecord::outputdataInfo()
无限不停地打印,但 Reservation::printBookingRecord()
没有任何 react .这很奇怪,因为假设 BookingRecord::outputdataInfo()
中没有 for 循环.我想知道如何打印数据(
Reservation::printBookingRecord()
由 BookingRecord::outputdataInfo()
调用,但 vector 位于“保留”处)(或者 vector 可以在其他类中使用)
非常感谢 :)
源代码 (有点长)
//
// main.cpp
//
#include <iostream>
#include <string>
#include <cstdlib>
#include <vector>
#include "Menu.h"
#include "Reservation.h"
#include "BookingManager.h"
using namespace std;
int main(int argc, const char* argv[]) {
Menu m;
Reservation R;
BookingManager BM;
char choice;
do {
choice = m.menu();
switch (choice)
{
case 'R': case 'r':
R.outputdataInfo();
break;
case 'B': case 'b':
BM.outputdataInfo();
break;
default:
cout << "Invalid Alphabet. Please try again." << endl;
break;
}
} while (choice == 'R' || choice == 'r' || choice == 'B' || choice == 'b');
return 0;
}
//.....................
// Menu.h
//
#include <iostream>
#ifndef Menu_h
#define Menu_h
class Menu {
public: //Accessibility as public
char option;
char menu();
};
#endif
//.....................
// Menu.cpp
//
#include <iostream>
#include "Menu.h"
using namespace std;
char Menu::menu() {
cout << "" << endl;
cout << " BNC Exhibition Tour in European Cities" << endl;
cout << " Exhibition Recruitment " << endl;
cout << " " << endl;
cout << "Please type:" << endl;
cout << "R -> for Reservation Page" << endl;
cout << "B -> for Booking Manager Page" << endl;
cout << "And Press ENTER." << endl;
cin >> option;
cout << "" << endl;
return option;
}
//.............................
// Reservation.h
//
#include <iostream>
#include <vector>
using namespace std;
#ifndef Reservation_h
#define Reservation_h
class Reservation {
private:
vector<string> CompanyName;
public: //Accessibility as public
void outputdataInfo();
void setCompanyName(const string& cn);
Reservation();
~Reservation();
void printBookingRecord();
};
#endif
//.....................................
// Reservation.cpp
//
#include <iostream>
#include <string>
#include <sstream>
#include <cstdlib>
#include <vector>
using namespace std;
#include "Reservation.h"
void Reservation::outputdataInfo()
{
cout << "Please input detail information first :" << endl;
string CompName;
cout << "Company Name <-" << endl;
cin >> CompName;
Reservation::setCompanyName(string (CompName) );
cout << CompanyName.at(0) << endl; //it works
cout << CompanyName.size() << endl; //it works
cout << "End of Reservation, thank you." << endl;
}
//////////////////////// S E T T E R ////////////////////
void Reservation::setCompanyName(const string& cn)
{
this->CompanyName.push_back(cn);
}
//////////////////////// S E T T E R ////////////////////
Reservation::Reservation() {}
Reservation::~Reservation() {}
/////////////////////// P R I N T ///////////////////////
void Reservation::printBookingRecord() {
for (int i = 0; i < CompanyName.size(); i++) {
cout << " ---- Company ---- " << endl;
cout << "Name: " << CompanyName.at(i) << endl;
}
}
//.............................
// BookingManager.h
//
#include <iostream>
#include <vector>
#ifndef BookingManager_h
#define BookingManager_h
class BookingManager {
public: //Accessibility as public
char option;
void outputdataInfo();
};
//..........................................
// BookingManager.cpp
//
#include <iostream>
#include <string>
#include <sstream>
#include <cstdlib>
#include <vector>
#include "BookingManager.h"
#include "BookingRecord.h"
using namespace std;
void BookingManager::outputdataInfo() {
BookingRecord BR;
cout << "" << endl;
cout << " ----- Booking Manager -----" << endl;
cout << "" << endl;
cout << "Please type:" << endl;
cout << "B -> for Booking Record" << endl;
cout << "And Press ENTER." << endl;
cin >> option;
cout << "" << endl;
do {
switch (option)
{
case 'B': case 'b':
BR.outputdataInfo();
break;
default:
cout << "Invalid Alphabet. Please try again." << endl;
break;
}
} while (option == 'B' || option == 'b');
}
#endif
//...........................................
// BookingRecord.h
//
#include <iostream>
#include <vector>
#include "Reservation.h"
#ifndef BookingRecord_h
#define BookingRecord_h
class BookingRecord : public Reservation {
public: //Accessibility as public
void outputdataInfo();
};
#endif
//..........................................
// BookingRecord.cpp
//
#include <iostream>
#include <string>
#include <vector>
#include "Reservation.h"
#include "BookingRecord.h"
void BookingRecord::outputdataInfo()
{
cout << "" << endl;
cout << " ----- Booking Record -----" << endl;
cout << "" << endl;
cout << " Print all the information..." << endl;
Reservation::printBookingRecord();
}
// END
最佳答案
所以你有两个 CompanyNames
在你的代码中。
一个在这里,R
的一部分多变的。
int main(int argc, const char* argv[]) {
Menu m;
Reservation R;
另一个在这里
void BookingManager::outputdataInfo() {
BookingRecord BR;
BookingRecord
源自 Reservation
, 所以它还包含一个 CompanyName
.我认为很明显,您正在向
CompanyName
添加名称在 R
在 main
但打印出 CompanyName
在 BR
在 BookingManager::outputdataInfo
.类设计在我看来是错误的。例如,您的方法缺少参数。当然
BookingManager::outputdataInfo
应该采取BookingRecord
作为参数允许调用者指定哪个BookingRecord
他们想输出。只需声明 BookingRecord
作为 BookingManager::outputdataInfo
中的局部变量没有任何意义。在您急于编写大量代码之前,请尝试考虑您的类的设计。不同的类应该如何相互关联,需要哪些成员变量,需要哪些方法,这些方法需要哪些参数和返回类型。考虑你的类如何模拟现实世界,而不是你将如何实现功能。稍后,请先正确设计。
关于C++ 继承 vector 问题(无限循环+在其他类中使用 vector 的问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61858122/