#include <iostream>
using std::cout;
using std::cin;
using std::endl;
enum CHOICE{DrawRect = 1, GetArea, GetPerim, ChangeDimensions, Quit};
//Rectangle class declaration
class Rectangle
{
Rectangle(unsigned int width, unsigned int height);
~Rectangle();
//access methods:
public:
unsigned int GetHeight() const {return itsHeight;}
unsigned int GetWidth() const {return itsWidth;}
unsigned int GetArea() const {return itsHeight*itsWidth;}
unsigned int GetPerim() const {return 2*(itsHeight+itsWidth);}
void SetSize(unsigned int newWidth, unsigned int newHeight);
//other methods:
private:
unsigned int itsWidth, itsHeight;
};
//class methods execution
void Rectangle::SetSize(unsigned int newWidth, unsigned int newHeight)
{
itsWidth = newWidth;
itsHeight = newHeight;
}
Rectangle::Rectangle(unsigned int width, unsigned int height)
{
itsWidth = width;
itsHeight = height;
}
Rectangle::~Rectangle() {}
unsigned short int DoMenu();
void DoDrawRect(Rectangle);
void DoGetArea(Rectangle);
void DoGetPerim(Rectangle);
void main(int argc, char* argv[])
{
//object "rectangle" initialization (30, 5)
Rectangle theRect(30, 5);
unsigned short int choice = DrawRect;
bool fQuit = false;
while (!fQuit)
{
choice = DoMenu();
if (choice < DrawRect || choice > Quit)
{
cout << "\nInvalid choice, please try again.\n\n";
continue;
}
switch (choice)
{
case DrawRect:
DoDraw(theRect);
break;
case GetArea:
DoGetArea(theRect);
break;
case GetPerim:
DoGetPerim(theRect);
break;
case ChangeDimensions:
unsigned int newWidth, newHeight;
cout << "\nNew width: ";
cin >> newWidth;
cout << "\nNew height: ";
cin >> newHeight;
theRect.SetSize(newWidth, newHeight);
DoDrawRect(theRect);
break;
case Quit:
fQuit = true;
cout << "\nExiting...\n\n";
break;
} //end switch
} //end while
system("PAUSE");
} //end main
unsigned short int DoMenu()
{
unsigned short int choice;
cout << "\n\n***Menu***\n";
cout << "(1) Draw rectangle\n";
cout << "(2) Area\n";
cout << "(3) Perimeter\n";
cout << "(4) Resize\n";
cout << "(5) Quit\n";
cin >> choice;
return choice;
}
void DoDrawRect(Rectangle theRect)
{
unsigned int height = theRect.GetHeight();
unsigned int width = theRect.GetWidth();
for (unsigned short int i = 0; i < height; i++)
{
for (unsigned short int j = 0; j < width; j++)
cout << "*";
cout << "\n";
}
}
void DoGetArea(Rectangle theRect)
{
cout << "Area: " << theRect.GetArea() << endl;
}
void DoGetPerim(Rectangle theRect)
{
cout << "Perimeter: " << theRect.GetPerim() << endl;
}
Невозможно обратится к private члену
Код:
Выдает такие ошибки:
Цитата:
i:\projects\liberty\rectangle.cpp(50): error C2248: Rectangle::Rectangle: невозможно обратиться к private член, объявленному в классе "Rectangle"
1> i:\projects\liberty\rectangle.cpp(11): см. объявление "Rectangle::Rectangle"
1> i:\projects\liberty\rectangle.cpp(10): см. объявление "Rectangle"
1>i:\projects\liberty\rectangle.cpp(50): error C2248: Rectangle::~Rectangle: невозможно обратиться к private член, объявленному в классе "Rectangle"
1> i:\projects\liberty\rectangle.cpp(12): см. объявление "Rectangle::~Rectangle"
1> i:\projects\liberty\rectangle.cpp(10): см. объявление "Rectangle"
1>i:\projects\liberty\rectangle.cpp(68): error C3861: DoDraw: идентификатор не найден
1>i:\projects\liberty\rectangle.cpp(110): error C2248: Rectangle::~Rectangle: невозможно обратиться к private член, объявленному в классе "Rectangle"
1> i:\projects\liberty\rectangle.cpp(12): см. объявление "Rectangle::~Rectangle"
1> i:\projects\liberty\rectangle.cpp(10): см. объявление "Rectangle"
1>i:\projects\liberty\rectangle.cpp(123): error C2248: Rectangle::~Rectangle: невозможно обратиться к private член, объявленному в классе "Rectangle"
1> i:\projects\liberty\rectangle.cpp(12): см. объявление "Rectangle::~Rectangle"
1> i:\projects\liberty\rectangle.cpp(10): см. объявление "Rectangle"
1>i:\projects\liberty\rectangle.cpp(128): error C2248: Rectangle::~Rectangle: невозможно обратиться к private член, объявленному в классе "Rectangle"
1> i:\projects\liberty\rectangle.cpp(12): см. объявление "Rectangle::~Rectangle"
1> i:\projects\liberty\rectangle.cpp(10): см. объявление "Rectangle"
1> i:\projects\liberty\rectangle.cpp(11): см. объявление "Rectangle::Rectangle"
1> i:\projects\liberty\rectangle.cpp(10): см. объявление "Rectangle"
1>i:\projects\liberty\rectangle.cpp(50): error C2248: Rectangle::~Rectangle: невозможно обратиться к private член, объявленному в классе "Rectangle"
1> i:\projects\liberty\rectangle.cpp(12): см. объявление "Rectangle::~Rectangle"
1> i:\projects\liberty\rectangle.cpp(10): см. объявление "Rectangle"
1>i:\projects\liberty\rectangle.cpp(68): error C3861: DoDraw: идентификатор не найден
1>i:\projects\liberty\rectangle.cpp(110): error C2248: Rectangle::~Rectangle: невозможно обратиться к private член, объявленному в классе "Rectangle"
1> i:\projects\liberty\rectangle.cpp(12): см. объявление "Rectangle::~Rectangle"
1> i:\projects\liberty\rectangle.cpp(10): см. объявление "Rectangle"
1>i:\projects\liberty\rectangle.cpp(123): error C2248: Rectangle::~Rectangle: невозможно обратиться к private член, объявленному в классе "Rectangle"
1> i:\projects\liberty\rectangle.cpp(12): см. объявление "Rectangle::~Rectangle"
1> i:\projects\liberty\rectangle.cpp(10): см. объявление "Rectangle"
1>i:\projects\liberty\rectangle.cpp(128): error C2248: Rectangle::~Rectangle: невозможно обратиться к private член, объявленному в классе "Rectangle"
1> i:\projects\liberty\rectangle.cpp(12): см. объявление "Rectangle::~Rectangle"
1> i:\projects\liberty\rectangle.cpp(10): см. объявление "Rectangle"
Методы доступа к членам класса задал же, в чем проблема?
З.Ы. начинающий, сильно не ругайте)
Теперь другой вопрос. как реализовать проверку вводимых значений?
Если при
Код:
if (choice < DrawRect || choice > Quit || !choice)
{
cout << "Invalid choice, please reload program.\n";
continue;
}
{
cout << "Invalid choice, please reload program.\n";
continue;
}
ввести букву, то программа выдаст строку и зависнет.
Код:
choice = DoMenu();
while(choice < DrawRect || choice > Quit)
{
cout << "\nInvalid choice, please try again.\n\n";
choice = DoMenu();
}
while(choice < DrawRect || choice > Quit)
{
cout << "\nInvalid choice, please try again.\n\n";
choice = DoMenu();
}
Хотя я бы проверку сделал в DoMenu();