Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Может ли работать программа, если там нет public.


Автор: St0x 5.1.2006, 01:42
Помогите сделать задание по инфоматике. ПРОГУ ПИСАТЬ НЕ НАДО!!!
На уроке информатики препод задал задание на С++ в графическом режиме
на компиляторе Borland C++ 3.1 написать прогу, в которой две фигуры
(точка и окружность), перемещаясь в пространстве, не должны выходить
за пределы поля, очерчивающим прямоугольником, и реализовать с помощью
объектно-ориентированного программирования и используя виртуальные
функции.
Прогу я написал, но при здаче препод попросил меня, все места,
где использовались PUBLIC заменить на PROTECTED. Отсюда вопрос:
Может ли работать программа, если там нет ни одного PUBLIC.
Если да, то подскажите, как написать прогу.
Текст проги:
Код

#include <iostream.h>
#include <conio.h>
#include <graphics.h>
#include <process.h>
#include <stdio.h>
#include <fstream.h>
#include <time.h>
#include <dos.h>
#include <bios.h>
#include <stdlib.h>

//class Klavishi
class Klavishi {
public:
virtual int show()=0;
virtual int hide()=0;
};

//class Point
class Point:virtual public Klavishi {
public:
int X1,Y1;//chenter to4ki dlia class Point
int x1,y1,x2,y2;//parametrii oblasti
Point (int a,int b) {X1=a;Y1=b;};//X1,Y1
int show ();//pokazat to4ky
int hide();//skriiti
int ramka_p();//pokazanie ramki
};

int Point::show () {
rectangle (X1,Y1,X1,Y1);
return 0;
};

int Point::hide () {
setcolor (0);
rectangle (X1,Y1,X1,Y1);
return 0;
};

int Point::ramka_p () {
int x1,y1,x2,y2;
x1=0;
y1=0;
x2=639;
y2=479;
setcolor (5);
rectangle (x1,y1,x2,y2);
return 0;
};

//class Circle
class Circle:virtual public Klavishi {
public:
int X2,Y2;//chenter to4ki dlia class Circle
int R;//radius okryznosti
Circle (int c,int d,int rad) {X2=c;Y2=d;R=rad;};//X2,Y2
int show ();
int hide();
};

int Circle::show() {
circle (X2,Y2,R);
return 0;
};

int Circle::hide () {
setcolor (0);
circle (X2,Y2,R);
return 0;
};

void main()
{
int gdriver=DETECT;
int gmode;
int errorcode;
initgraph(&gdriver, &gmode,"e:\\BORLANDC\\BGI\\");
errorcode=graphresult();
if(errorcode!=grOk)
  {
  printf("OLLIbka: %d\n", errorcode);
  puts("Sei4as nyzno nazhat <Enter>");
  getch();
  exit(1);
  }
int a=10;//na4alnaia koord to4ki X
int b=10;//na4alnaia koord to4ki Y
int c=75;//na4alnaia koord kryga X
int d=400;//na4alnaia koord kryga Y
int rad=50;//radius kryga
Circle koord_circle(c,d,rad);
char ch;
int t=2;//color to4ki
int tt=15;//color kryga
for (;;) {
Point koord_point(a,b);
setcolor(t);
koord_point.show();
Circle koord_circle(c,d,rad);
koord_circle.R;
setcolor(tt);
koord_circle.show();
koord_point.ramka_p();
ch=getch();
if (ch=='a') {koord_point.hide();a--;if (a<=1) {a=1;};Point koord_point(a,b);setcolor (t);koord_point.show();}
if (ch=='d') {koord_point.hide();a++;if (a>=639) {a=638;};Point koord_point(a,b);setcolor (t);koord_point.show();}
if (ch=='w') {koord_point.hide();b--;if (b<=1) {b=1;};Point koord_point(a,b);setcolor (t);koord_point.show();}
if (ch=='s') {koord_point.hide();b++;if (b>=479) {b=478;};Point koord_point(a,b);setcolor (t);koord_point.show();}
if (ch=='z') {setcolor (t=rand()%16);koord_point.show();}
if (ch=='q') {break;}
if ((int)ch==75) {koord_circle.hide();c--;if (c-koord_circle.R<=1) {c=1+koord_circle.R;};Circle koord_circle(c,d,rad);setcolor (tt);koord_circle.show();}
if ((int)ch==77) {koord_circle.hide();c++;if (638-c-rad<=0) {c=638-rad;};Circle koord_circle(c,d,rad);setcolor (tt);koord_circle.show();}
if ((int)ch==72) {koord_circle.hide();d--;if (d-koord_circle.R<=1) {d=1+koord_circle.R;};Circle koord_circle(c,d,rad);setcolor (tt);koord_circle.show();}
if ((int)ch==80) {koord_circle.hide();d++;if (478-d-rad<=0) {d=478-rad;};Circle koord_circle(c,d,rad);setcolor (tt);koord_circle.show();}
if (ch=='x') {setcolor (tt=rand()%16);koord_circle.show();}
if (ch=='t') {rad=rad-1;koord_circle.hide();Circle koord_circle(c,d,rad);}
if (ch=='r'&&(c-rad>1)&&(d-rad>1)) {rad=rad+1;koord_circle.hide();Circle koord_circle(c,d,rad);}
if (ch=='r'&&((c-rad==0)||(d-rad==0))) {rad=rad;c;d;koord_circle.hide();Circle koord_circle(c,d,rad);}
if (ch=='r'&&((c+rad==639)||(d-rad==0))) {rad=rad-1;c;d;koord_circle.hide();Circle koord_circle(c,d,rad);}
if (ch=='r'&&((d+rad==479)||(c-rad==0))) {rad=rad-1;c;d;koord_circle.hide();Circle koord_circle(c,d,rad);}
if (ch=='r'&&((d+rad>=479)||(c+rad>=639))) {rad=rad;c;d;koord_circle.hide();Circle koord_circle(c,d,rad);}
if (koord_point.X1<=1) {koord_point.hide();koord_point.X1=2;koord_point.show();}
if (koord_point.Y1<=1) {koord_point.hide();koord_point.Y1=2;koord_point.show();}
     };
closegraph();
;}

Автор: volvo877 5.1.2006, 02:12
Цитата(St0x @ 5.1.2006, 00:42 Найти цитируемый пост)
Может ли работать программа, если там нет ни одного PUBLIC.
Может... friend-функции еще никто не отменял smile

Замени, как препод просил, все public на protected и объяви void main() другом классов Point и Circle... Все будет работать... Хотя это и извращение...

Автор: TIGERоX 5.1.2006, 17:45
пример:
Код

class Foo{
   friend class Bar;//Bar становится доступно все!!
   protected:
       Foo(){}
};

class Bar{
    private:
       Foo *obj; 
    public:
       Bar() : obj(new Foo){}
       ~Bar(){delete obj;} 
};

void main(){
     Bar *o = new Bar;  //Вызывается конструтор obj
    delete o;
}

Автор: Partizan 5.1.2006, 17:48
Товарищ, TIGERоX...Юзайте [code=cpp]

Автор: TIGERоX 5.1.2006, 17:52
Цитата(volvo877 @ 5.1.2006, 02:12)
Цитата(St0x @  5.1.2006,  00:42 Найти цитируемый пост)
Может ли работать программа, если там нет ни одного PUBLIC.
Хотя это и извращение...

этот прием часто использутся в классах, использующих шаблоны ;)

Автор: St0x 6.1.2006, 01:35
Цитата

Все будет работать... Хотя это и извращение...

Точняк!!! У нас препод по инфе извращенец!!!
Последовал совету Шустрого, все ОК. Тему закрывать пока не буду, ибо сдавать лабу в понедельник. Вдруг там еще, что надо будет спросить.

Автор: threef 9.1.2006, 21:47
не думаю я, что ин просил тебя ВОВСЕ без public:. Просто в исходном примере у тебя public: все - и функции, и переменные. Видать, он имел в виду закрыть доступ к переменным класса. А ты перестарался, а тут все и рады.

Автор: Partizan 9.1.2006, 22:36
Ну,знаешь....телепаты, как говорится, в отпуске....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)