Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработка объектов различных производных классов, размещенных в массивах 
:(
    Опции темы
Madstar
Дата 10.12.2009, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 10.12.2009

Репутация: нет
Всего: нет



Добрый день! изучаю программирование на C# вот возник вопрос

Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ShapeVirtual
{
    abstract class Shape
    {
        protected int xPos;
        protected int yPos;

        public Shape(int x, int y)
        {
            xPos = x;
            yPos = y;
        }

        abstract public void Draw(int x, int y);
    }
    class Point : Shape
    {
        public Point(int x, int y) : base(x,y)
        {
        }

        public override void Draw(int x, int y)
        {
            Console.WriteLine("Рисование точки в ({0}, {1})", x, y);
            xPos=x;
            yPos=y;
        }
    }
    class Rectangle : Shape
    {
        int widht;
        int height;

        public Rectangle(int x, int y, int w, int h) : base(x, y)
        {
            widht = w;
            height = h;
        }

        public override void Draw(int x, int y)
        {
            Console.WriteLine("Рисование прямоугольника в ({0}, {1})", x, y);
            xPos = x;
            yPos = y;
        }
    }
    class ShapeVirtualApp
    {
        static void Main(string[] args)
        {
            Shape[] allShapes = new Shape[4];
            allShapes[0] = new Point(1, 5);
            allShapes[3] = new Rectangle(2, 3, 1, 5);
            allShapes[2] = new Rectangle(1, 2, 3, 4);
            allShapes[1] = new Point(31, 4);

            foreach (Shape currentShape in allShapes) currentShape.Draw(1, 0);

                Console.ReadLine();
        } 
    }
}



Вобщем тут все четыре фигуры "рисуются" в одной точке с координатами (1,0), как можно изменить цикл таким образом, чтобы каждая фигура была нарисована на своем месте?
PM MAIL   Вверх
tol05
Дата 10.12.2009, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



Цитата(Madstar @  10.12.2009,  11:44 Найти цитируемый пост)
Вобщем тут все четыре фигуры "рисуются" в одной точке с координатами (1,0)

Вы в конструкторе объекта инициализируете его координаты определенными значениями, а в методе Draw эти значения сами и перезаписываете. По-моему изначально логика построения фигуры неправильна. 

Вообще-то говоря, нужно координаты рисования задавать при рисовании, а не в конструкторе. И координаты задавать для каждой из фигур отдельно.
Но уж если Вы настаиваете на цикле... Тогда не задавайте координаты в методе Draw
Код

...
abstract public void Draw();
...
static void Main(string[] args)
        {
            Shape[] allShapes = new Shape[4];
            allShapes[0] = new Point(1, 5);
            allShapes[3] = new Rectangle(2, 3, 1, 5);
            allShapes[2] = new Rectangle(1, 2, 3, 4);
            allShapes[1] = new Point(31, 4);
            foreach (Shape currentShape in allShapes) currentShape.Draw();
                Console.ReadLine();
        } 


Это сообщение отредактировал(а) tol05 - 10.12.2009, 13:10


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Madstar
Дата 10.12.2009, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 10.12.2009

Репутация: нет
Всего: нет



Этот пример рассматривается в самоучителе и там как раз обращают внимание на изменение цикла, чисто в учебных целях видимоsmile
Просто я думал есть возможность рисовать фигуры задавая разные координаты в методе Draw()

ладно, спасибо за консультацию smile
PM MAIL   Вверх
STRELOKBMSTU
Дата 10.12.2009, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 11.8.2007
Где: Russia.MR.Moscow( );

Репутация: нет
Всего: нет



Код

...
abstract public void Draw();
...
static void Main(string[] args)
        {
            Shape[] allShapes = new Shape[4];
            allShapes[0] = new Point(1, 5);
            allShapes[3] = new Rectangle(2, 3, 1, 5);
            allShapes[2] = new Rectangle(1, 2, 3, 4);
            allShapes[1] = new Point(31, 4);

            for (int i=0, j=0; i<4; i++, j+=2)
                currentShape.Draw(i,j);
            
                Console.ReadLine();
        } 


Или так smile 
PM MAIL ICQ Skype   Вверх
Madstar
Дата 11.12.2009, 06:19 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 10.12.2009

Репутация: нет
Всего: нет



to STRELOKBMSTU :

ругается на currentShape, нужно его определить видимо сначала.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1711 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.