С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 1
Регистрация: 12.06.2009
Сообщений: 60

абстрактные классы

07.03.2013, 19:16. Показов 1772. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
помогите пожалуийстаб не доет правильный ответ, не могу найти ошибку. Спасибо
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
abstract class Shape
    {
        protected double width, length;
        protected string Name;
       
        public Shape(double width, double length, string Name)
        {
            this.length = length;
            this.width = width;
            this.Name = Name;
        }
        public Shape(double widht, string Name)
        {
            //this.width = width;
          // this.Name = Name;
 
        }
        public abstract double Area();
        public abstract void PrintInfo();
        public abstract double Perimeter();
        
    }
    class Traingle : Shape
    {
        protected double side3, high;
        public Traingle(double width, double length,double side3, double high , string Name)
            :base(width, length,  Name)
        {
            this.side3 = side3;
            this.high = high;
           
        }
        public override double Area()
        {
            return width * high / 2;
        }
        public override void PrintInfo()
        {
            Console.WriteLine("this is a {0} whith sides : {1},{2},{3}\nArea : {3}\nPerimeter : {4}",
               Name, width, high, side3, Area(),Perimeter());
        }
        public override double Perimeter()
        {
            //throw new NotImplementedException();
            return width + high + side3;
        }
    }
    class Square : Shape
    {
        public Square(double width, string Name)
            : base(width, Name)
        {
           // this.Name = Name;
           // this.width = width;
        }
        
        public override double Area()
        {
            return width * width;
        }
        public override void PrintInfo()
        {
            Console.WriteLine("this is a {0} whith side: {1},\nArea : {2}\nPerimeter : {3}",
               Name, width, Area(), Perimeter());
        }
        public override double Perimeter()
        {
            //throw new NotImplementedException();
            return width * 4;
        }
 
    }
    class Program
    {
        static void Main(string[] args)
        {
            Shape []obg = new Shape[] {
                new Traingle( 5, 6, 8, 8, "Triangle"),
                new Square( 9, "Square")};
            obg[0].PrintInfo();
            obg[1].PrintInfo();
            Console.ReadLine();
        }
    }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.03.2013, 19:16
Ответы с готовыми решениями:

Абстрактные классы
Здравствуйте. Задача следующая. У меня есть огромное количество форм с частью одинакового функционала, и нужно смастерить базовую...

Абстрактные классы и интерфейсы
Добрый день, какой смысл в C# был заложен в создание интерфейсов, а не использование абстрактных классов. Да я знаю отличия, что в...

Интерфейсы и абстрактные классы
Всем привет! Помогите пожалуйста, недавно подкинули вопрос, который заинтересовал: что было бы если разработчики Майкрософт Icomparable...

9
338 / 327 / 154
Регистрация: 29.10.2012
Сообщений: 949
07.03.2013, 19:34
В конструкторе, строка 12, в параметрах поменяейте местами буквы t и h.
1
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
07.03.2013, 19:48
Это конечно всё бесполезно и будет сказано впустую, но PrintInfo должен по идее возвращать строку, а не сам выводить её на консоль. Так на заметку.

Добавлено через 25 секунд
Ну и выводить данные с массива лучше циклом.
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
07.03.2013, 20:50
а зачем конструктор абстрактному классу?

Добавлено через 4 минуты
именно public конструктор

Добавлено через 9 минут
все, забираю претензии назад
0
 Аватар для corlovito
461 / 442 / 75
Регистрация: 26.12.2012
Сообщений: 2,888
07.03.2013, 21:02
Цитата Сообщение от Casper-SC Посмотреть сообщение
PrintInfo должен по идее возвращать строку, а не сам выводить её на консоль.
Объясните пожалуйста почему лучше так делать?
0
 Аватар для Zuzik
298 / 256 / 57
Регистрация: 11.06.2012
Сообщений: 1,557
07.03.2013, 21:30
Цитата Сообщение от corlovito Посмотреть сообщение
Объясните пожалуйста почему лучше так делать?
Чтобы обеспечить программе максимальную универсальность. Т.е. у вас сейчас программа в консоли, вы захотите переделать ее на WPF (Win Forms, Asp .Net MVC и прочее, нужное подчеркнуть) и вам нужно будет делать вывод не на консоль а куда нибудь еще. Что вы будете делать? Исправлять в исходниках? А если там таких мест штук 100? А если исходники недоступны? Чтобы не было таких вопросов используют строковую переменную и делают потом с ней все что угодно.
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
07.03.2013, 21:51
IamRain, public обычно ни к чему, юзается обычно Protected :dunno:
0
0 / 0 / 1
Регистрация: 12.06.2009
Сообщений: 60
08.03.2013, 00:54  [ТС]
опять проблема тапреь уже с классом Rectangle. вроде все правильно, но не компилируется, почему-то выходит проблема с конструктором
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
 abstract class Shape
    {
        protected double width, length;
        protected string Name;
 
        
        protected Shape(double width, string Name)
        {
           this.width = width;
           this.Name = Name;
 
        }
        protected Shape(double width, double length, string Name)
        {
            this.width = width;
            this.length = length;
            this.Name = Name;
        }
        public abstract double Area();
        public abstract void PrintInfo();
        public abstract double Perimeter();
 
    }
    class Traingle : Shape
    {
        protected double side3, high;
        public Traingle(double width, double length, double side3, double high, string Name)
            : base(width, length, Name)
        {
            this.side3 = side3;
            this.high = high;
 
        }
        public override double Area()
        {
            return width * high / 2;
        }
        public override void PrintInfo()
        {
            Console.WriteLine("this is a {0} whith sides : {1},{2},{3}\nArea : {3}\nPerimeter : {4}",
               Name, width, high, side3, Area(), Perimeter());
        }
        public override double Perimeter()
        {
            return width + high + side3;
        }
    }
    class Square : Shape
    {
        public Square(double width, string Name)
            : base(width, Name){}
 
        public override double Area()
        {
            return width * width;
        }
        public override void PrintInfo()
        {
            Console.WriteLine("this is a {0} whith side: {1},\nArea : {2}\nPerimeter : {3}",
               Name, width, Area(), Perimeter());
        }
        public override double Perimeter()
        {
            return width * 4;
        }
 
    }
    class Rectangle : Shape
    {
        protected Rectangle (double width, double length, string Name)
            :base(width,length,Name) {}
        
        public override double Area()
        {
            return width * length;
        }
        public override void PrintInfo()
        {
            Console.WriteLine("this is a {0} whith side: {1},\nArea : {2}\nPerimeter : {3}",
               Name, width, Area(), Perimeter());
        }
        public override double Perimeter()
        {
 
            return 2*(width+length);
        }
 
    }
    class Program
    {
        static void Main(string[] args)
        {
            Shape[] obg = new Shape[] {
                          new Traingle( 5, 6, 8, 8, "Triangle"),
                          new Square( 9, "Square"),
                          new Rectangle(5, 9, "Rectangle") };
            obg[0].PrintInfo();
            obg[1].PrintInfo();
            obg[2].PrintInfo();
            Console.ReadLine();
        }
    }
}
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
08.03.2013, 01:06
Внимательно код не смотрел, но в классе Rectangle вас конструктор с модификатором protected, и его не видно из Main..
1
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
08.03.2013, 03:44
Цитата Сообщение от corlovito Посмотреть сообщение
Объясните пожалуйста почему лучше так делать?
Цитата Сообщение от Zuzik Посмотреть сообщение
Чтобы обеспечить программе максимальную универсальность. Т.е. у вас сейчас программа в консоли, вы захотите переделать ее на WPF (Win Forms, Asp .Net MVC и прочее, нужное подчеркнуть) и вам нужно будет делать вывод не на консоль а куда нибудь еще. Что вы будете делать? Исправлять в исходниках? А если там таких мест штук 100? А если исходники недоступны? Чтобы не было таких вопросов используют строковую переменную и делают потом с ней все что угодно.
Именно так!

Добавлено через 9 минут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public class Program
    {
        private static void Main(string[] args)
        {
            Shape[] obg = new Shape[]
                {
                    new Traingle(5, 6, 8, 8, "Triangle"),
                    new Square(9, "Square"),
                    new Rectangle(5, 9, "Rectangle")
                };
 
            foreach (var shape in obg)
                Console.WriteLine(shape.GetInfo());
 
            Console.ReadKey();
        }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    public abstract class Shape
    {
        protected double width, length;
        protected string name;
 
        protected Shape(double width, string name)
            : this(width, 0.0, name)
        {
        }
 
        protected Shape(double width, double length, string name)
        {
            this.width = width;
            this.length = length;
            this.name = name;
        }
 
        public abstract double Area();
        public abstract string GetInfo();
        public abstract double Perimeter();
 
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
    public class Traingle : Shape
    {
        protected double side3, high;
 
        public Traingle(double width, double length, double side3, double high, string name)
            : base(width, length, name)
        {
            this.side3 = side3;
            this.high = high;
 
        }
 
        public override double Area()
        {
            return width * high / 2;
        }
 
        public override string GetInfo()
        {
            return string.Format("this is a {0} whith sides : {1},{2},{3}\nArea : {3}\nPerimeter : {4}",
                                 name, width, high, side3, Area(), Perimeter());
        }
 
        public override double Perimeter()
        {
            return width + high + side3;
        }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    public class Square : Shape
    {
        public Square(double width, string name)
            : base(width, name)
        {
        }
 
        public override double Area()
        {
            return width * width;
        }
 
        public override string GetInfo()
        {
            return string.Format("this is a {0} whith side: {1},\nArea : {2}\nPerimeter : {3}",
                                 name, width, Area(), Perimeter());
        }
 
        public override double Perimeter()
        {
            return width * 4;
        }
 
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    public class Rectangle : Shape
    {
        public Rectangle(double width, double length, string name)
            : base(width, length, name)
        {
        }
 
        public override double Area()
        {
            return width * length;
        }
 
        public override string GetInfo()
        {
            return string.Format("this is a {0} whith side: {1},\nArea : {2}\nPerimeter : {3}",
                                 name, width, Area(), Perimeter());
        }
 
        public override double Perimeter()
        {
            return 2 * (width + length);
        }
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.03.2013, 03:44
Помогаю со студенческими работами здесь

Интерфейс и абстрактные классы
После прочтения Хабро-статьи http://habrahabr.ru/post/169949/, после коммента: "Стандартные вопросы тоже не стоит оставлять без внимания....

Абстрактные функции и классы
В чем плюсы практического применения абстрактных классов и функций, если абстрактные функции не имеют реализации и их нужно переопределять...

Есть ли в C# абстрактные классы?
есть ли абстрактные классы в C#?Или их роль выполняют интерфейсы?

ошибка в коде(абстрактные классы)
Доброго времени суток всем , я новичок , разбираюсь с абстрактными классами ,написал код ,а компилятор выдает ошибку :...

Абстрактные классы. Доступ к переменным
Всем привет. Столкнулся с такой проблемой. У меня есть абстрактный класс public abstract class Hero{ public abstract...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru