2016-03-09 5 views
-1

Итак, у меня был вопрос о отзывах моих профессоров по одной из программ, которые мы сделали. Я не совсем понял ее отзывы о том, что она имела в виду, поставив функции сеттеров во втором конструкторе. Вот что она сказала:Множество конструкторов классов C++

В следующий раз не забудьте сделать чтение и подготовку, назначенные перед попыткой лаборатории. Внимательно прочитайте задание.

Проблема заключается в том, что перегруженный конструктор (конструктор № 2) должен вызывать функции сеттера.

Перегруженный конструктор (конструктор № 2) не был протестирован. Создайте объект с перегруженным конструктором, например: Item itemTwo (666,3, .99);

Хороший класс, хорошая основная программа и стиль кодирования.

Это была проблема:

Problem

И, наконец, вот мой код:

#include <iostream> 
 
#include <iomanip> 
 
using namespace std; 
 

 
class Inventory 
 
{ 
 
\t private: 
 
\t \t int itemNumber; \t \t \t //Private Class Members 
 
\t \t int quanity; 
 
\t \t double cost; 
 
\t public: 
 
\t \t Inventory(); \t \t \t //Public Member Functions 
 
\t \t Inventory(int i, int q, double c); 
 
\t \t void setItemNumber(int); 
 
\t \t void setQuanity(int); 
 
\t \t void setCost(double); 
 
\t \t int getItemNumber() const; 
 
\t \t int getQuanity() const; 
 
\t \t double getCost() const; 
 
\t \t double getTotalCost() const; 
 
}; 
 

 
int main() 
 
{ 
 
\t int itemNum; 
 
\t int qty; 
 
\t double price; \t 
 
\t Inventory itemOne; \t \t \t //Declares itemOne and itemTwo being an Inventory class objects 
 
\t Inventory itemTwo; 
 
\t 
 
/****************************************************************************/ 
 
\t 
 
\t cout << "Please Enter Data For Item One\n"; \t \t \t \t \t //Data entry for Item One 
 
\t cout << "Enter item number: "; 
 
\t cin >> itemNum; 
 
\t \t 
 
\t while (itemNum < 0) \t \t \t \t \t \t \t \t \t \t \t //Safegaurds for data 
 
\t { 
 
\t \t cout << "Please enter a non-negative item number: "; 
 
\t \t cin >> itemNum; \t \t 
 
\t } 
 
\t 
 
\t cout << "Enter quanity: "; 
 
\t cin >> qty; 
 
\t 
 
\t while (qty < 0) 
 
\t { 
 
\t \t cout << "Please enter a non-negative quanity number: "; 
 
\t \t cin >> qty; 
 
\t } 
 
\t 
 
\t cout << "Enter price: "; 
 
\t cin >> price; 
 
\t 
 
\t while (price < 0) 
 
\t { 
 
\t \t cout << "Please enter a non-negative price: "; 
 
\t \t cin >> price; 
 
\t } 
 
\t \t 
 
\t itemOne.setItemNumber(itemNum); \t \t \t //Passes All Data To Correct Functions 
 
\t itemOne.setQuanity(qty); 
 
\t itemOne.setCost(price); \t 
 
\t cout << endl; \t \t \t \t \t \t \t \t \t \t //Formatting 
 
\t 
 
/****************************************************************************/ \t 
 

 
\t cout << "Please Enter Data For Item Two\n"; \t \t \t \t //Data Entry for Item Two 
 
\t cout << "Enter item number: "; 
 
\t cin >> itemNum; 
 
\t \t 
 
\t while (itemNum < 0) 
 
\t { 
 
\t \t cout << "Please enter a non-negative item number: "; 
 
\t \t cin >> itemNum; \t \t 
 
\t } 
 
\t 
 
\t cout << "Enter quanity: "; 
 
\t cin >> qty; 
 
\t 
 
\t while (qty < 0) 
 
\t { 
 
\t \t cout << "Please enter a non-negative quanity number: "; 
 
\t \t cin >> qty; 
 
\t } 
 
\t 
 
\t cout << "Enter price: "; 
 
\t cin >> price; 
 
\t 
 
\t while (price < 0) 
 
\t { 
 
\t \t cout << "Please enter a non-negative price: "; 
 
\t \t cin >> price; 
 
\t } 
 
\t 
 
\t itemTwo.setItemNumber(itemNum); \t \t \t //Passes All Data To Correct Functions 
 
\t itemTwo.setQuanity(qty); 
 
\t itemTwo.setCost(price); 
 
\t cout << endl; \t \t \t \t \t \t \t \t \t \t //Formatting 
 
\t 
 
/****************************************************************************/ \t 
 

 
\t 
 
\t cout << fixed << showpoint << setprecision(2); 
 

 
\t //All input displayed here 
 
\t cout << "Here's the data you entered for item one:\n"; 
 
\t cout << "Item Number: " << " \t \t " << itemOne.getItemNumber() << endl; 
 
\t cout << "Item Quanity: " << " \t \t " << itemOne.getQuanity() << endl; 
 
\t cout << "Item Cost: " << " \t \t " << "$" << itemOne.getCost() << endl; 
 
\t cout << "Item Total Cost: " << " \t " <<"$" << itemOne.getTotalCost() << endl << endl; 
 
\t 
 
\t cout << "Here's the data you entered for item two:\n"; 
 
\t cout << "Item Number: " << " \t \t " << itemTwo.getItemNumber() << endl; 
 
\t cout << "Item Quanity: " << " \t \t " << itemTwo.getQuanity() << endl; 
 
\t cout << "Item Cost: " << " \t \t " << "$" << itemTwo.getCost() << endl; 
 
\t cout << "Item Total Cost: " << " \t " <<"$" << itemTwo.getTotalCost() << endl; 
 
\t 
 
\t return 0; 
 
} 
 

 
Inventory::Inventory() \t \t \t \t \t \t \t //Default Constructor 
 
{ 
 
\t itemNumber = 0; 
 
\t quanity = 0; 
 
\t cost = 0; 
 
} 
 

 
Inventory::Inventory(int i, int q, double c) \t //Constructor #2 
 
{ 
 
\t itemNumber = i; 
 
\t quanity = q; 
 
\t cost = c; 
 
} 
 

 
void Inventory::setItemNumber(int i) \t \t \t //Re-Evaluates For a Negative Number and 
 
{ \t \t \t \t \t \t \t \t \t \t \t \t //Passes User's Entered Data to the Private class 
 
\t if (i >= 0) 
 
\t \t itemNumber = i; 
 
\t else 
 
\t \t itemNumber = 0; 
 
} 
 

 
void Inventory::setQuanity(int q) \t \t \t \t //Re-Evaluates For a Negative Number and 
 
{ \t \t \t \t \t \t \t \t \t \t \t \t //Passes User's Entered Data to the Private class 
 
\t if (q >= 0) 
 
\t \t quanity = q; 
 
\t else 
 
\t \t quanity = 0; 
 
} 
 

 
void Inventory::setCost(double c) \t \t \t \t ////Re-Evaluates For a Negative Number and 
 
{ \t \t \t \t \t \t \t \t \t \t \t \t //Passes User's Entered Data to the Private class 
 
\t if (c >= 0) 
 
\t \t cost = c; 
 
\t else 
 
\t \t cost = 0; 
 
} 
 

 
int Inventory::getItemNumber() const \t \t \t //All 'Getter' Functions to Display Object's Data 
 
{ \t \t \t \t \t \t \t \t \t \t \t \t //Whilst Keeping Data Integrity With 'const' 
 
\t return itemNumber; 
 
} 
 

 
int Inventory::getQuanity() const 
 
{ 
 
\t return quanity; 
 
} 
 

 
double Inventory::getCost() const 
 
{ 
 
\t return cost; 
 
} 
 

 
double Inventory::getTotalCost() const \t \t \t //Calculates Total Cost and Returns 
 
{ 
 
\t return cost * quanity; 
 
} 
 

 
/* 
 
----------------------------------------------------- 
 
Please Enter Data For Item One 
 
Enter item number: 1303 
 
Enter quanity: 10 
 
Enter price: 2.50 
 

 
Please Enter Data For Item Two 
 
Enter item number: 5676 
 
Enter quanity: 54 
 
Enter price: 5.65 
 

 
Here's the data you entered for item one: 
 
Item Number:   1303 
 
Item Quanity:   10 
 
Item Cost:    $2.50 
 
Item Total Cost:  $25.00 
 

 
Here's the data you entered for item two: 
 
Item Number:   5676 
 
Item Quanity:   54 
 
Item Cost:    $5.65 
 
Item Total Cost:  $305.10 
 
----------------------------------------------------- 
 
Please Enter Data For Item One 
 
Enter item number: 7456 
 
Enter quanity: 10 
 
Enter price: 10.9 
 

 
Please Enter Data For Item Two 
 
Enter item number: 0293 
 
Enter quanity: 5 
 
Enter price: 109.23 
 

 
Here's the data you entered for item one: 
 
Item Number:   7456 
 
Item Quanity:   10 
 
Item Cost:    $10.90 
 
Item Total Cost:  $109.00 
 

 
Here's the data you entered for item two: 
 
Item Number:   293 
 
Item Quanity:   5 
 
Item Cost:    $109.23 
 
Item Total Cost:  $546.15 
 
----------------------------------------------------- 
 
*/

+3

_ «В следующий раз обязательно проделайте чтение и подготовку перед тем, как попытаться провести лабораторную работу. Прочтите внимательно ассигмент« Ну, это довольно ясно. –

+0

._. не говоря о том, что .. –

ответ

0

Ваш профессор, вероятно, имел в виду, что вы должны назвать сеттер функции в конструкторе i вместо того, чтобы непосредственно устанавливать значения:

Inventory::Inventory(int i, int q, double c) //Constructor #2 
{ 
    setItemNumber(i); 
    setQuantity(q); 
    setCost(c); 
} 
+0

Хм, я думал, что я пытался сделать это изначально, но дал мне компиляцию ошибок. Перейдем к повторной проверке. –

+0

Следует отметить, что основная причина для этого состоит в том, что ваши функции 'set' имеют дополнительную логику, которая не позволит вам устанавливать параметры' <0', тогда как ваш текущий перегруженный конструктор с радостью примет 'Inventory inv (-1, -1, -0.1); 'Если бы вы назвали функции' set', то все они бы установили на '0'. – Tas

+0

ahhhhh, это имеет гораздо больший смысл. Спасибо Тон, целая глава ужасно сбила меня с толку. –

0

Она права. Вы принимаете пользовательский ввод, поэтому вы должны проверить его со своими сеттерами, вы создали их по какой-либо причине.

Inventory::Inventory(int i, int q, double c) //Constructor #2 
{ 
    setItemNumber(i); 
    setQuantity(q); 
    setCost(c); 
} 
Смежные вопросы