Объектно-ориентированная C ++ Помощь? По какой-то причине вывод переменных объекта возвращает номера числовых массивов вместо фактических значений.

Хорошо. Я читаю C ++ для манекенов, и сейчас я обсуждаю объектную ориентацию. Я почти скопировал код из книги после того, как попытался, и не смог написать код из понятий, которые я изучил. Суть кода в том, чтобы создать класс с именем Pen, с перечислениями для описания объектов GoodPen и BadPen. Я создал перечисленные переменные, называемые Color и Pentype, и поставил отдельные параметры для каждой из них. Кажется, это проблема. Я назначаю значения для объектов, но по какой-то причине, когда я присматриваю назначенные значения, они возвращают местоположения числового массива каждого из значений, а не их фактические значения. вот код

Заголовочный файл pen.h:

#ifndef PEN_H_INCLUDED
#define PEN_H_INCLUDED

using namespace std;

enum Color
{
red,
blue,
yellow,
green,
black,
gray
};

enum PenType
{
ballpoint,
fountain,
felttip,
flammable
};

class Pen
{
public:
Color InkColor;
Color ShellColor;
Color CapColor;
PenType PenType;
double length;
double inklevel;
string brand;

void write(string words){
if(inklevel <= 0){
cout << "Uh-Oh, you're out of ink!" << endl;
} else {
cout << words << endl;
inklevel -= words.length();
}

}

void explode(){
cout << "You used explosive ink, the tip became heated via friction with the paper" << endl << " and the pen exploded, killing you and your family..." << endl;
inklevel = 0;
}

};

#endif // PEN_H_INCLUDED

Файл main.cpp:

#include<iostream>
#include<string>
#include "pen.h"
using namespace std;

extern void explode();

int main(){

string inpt;
Pen GoodPen;
Pen BadPen;GoodPen.brand = "OfficeDepot";
GoodPen.CapColor = black;
GoodPen.InkColor = gray;
GoodPen.ShellColor = gray;
GoodPen.PenType = ballpoint;
GoodPen.length = 6;             //inches
GoodPen.inklevel = 100;         //percent

BadPen.brand = "Staples";
BadPen.CapColor = red;
BadPen.InkColor = red;
BadPen.ShellColor = red;
BadPen.PenType = flammable;
BadPen.length = 6.66;           //inches
BadPen.inklevel = 100;          //percent

cout << "You have a choice: black pen or red pen. Choose wisely. ";
getline(cin, inpt);
if(inpt == "black" || inpt == "Black"){
cout << "You picked the right pen. The ink level is " << GoodPen.inklevel << "%" << endl;
cout << "The pen is " << GoodPen.length << " inches long, it is a " << GoodPen.PenType << " from " << GoodPen.brand << endl;
cout << "The cap is " << GoodPen.CapColor << " and the shell is " << GoodPen.ShellColor << endl;
cout << "The ink is " << GoodPen.InkColor << endl;
}else if(inpt == "red" || inpt == "Red"){
//explode();
cout << "You picked the wrong pen. The ink level is " << BadPen.inklevel << endl;
cout << "The pen is " << BadPen.length << " inches long, it is a " << BadPen.PenType << "from " << BadPen.brand << endl;
cout << "The cap is " << BadPen.CapColor << " and the shell is " << BadPen.ShellColor << endl;
cout << "The ink is " << BadPen.InkColor << endl;

}

return 0;
}

извини, я знаю, что мой кодпик отстой. Я признаю, что я новичок и, вероятно, совершаю ошибку новичка. код pen.h создает класс Pen и назначает ему свойства, файл main.cpp создает объекты для класса Pen и назначает свойства этим объектам. но это вывод, если выбрана опция «черный»:

You have a choice: black pen or red pen. Choose wisely. black
You picked the right pen. The ink level is 100%
The pen is 6 inches long, it is a 0 from OfficeDepot
The cap is 4 and the shell is 5
The ink is 5
Press any key to continue . . .

Большое спасибо за время. И извините за роман. :П

PS Я использую Visual Studio для компиляции.

1

Решение

Никаких «классовых проблем» здесь.

Внутренне enum в C / C ++ это просто целые числа. Метки изменяются компилятором на их целочисленное значение (от 0). На самом деле, вы могли бы сделать

GoodPen.PenType = 2;

и компилятор будет в порядке с этим.

Таким образом, получение строкового представления перечисления требует его создания; В.Г. Как преобразовать имена перечислений в строку в c

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]