Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
18 / 18 / 15
Регистрация: 27.11.2013
Сообщений: 462
1

Конструктор и класс

30.06.2015, 16:15. Просмотров 1370. Ответов 10
Метки нет (Все метки)

Всем привет, получил вот такое задание:
1. Создайте класс Animal для описания объекта «Животное», который включает:
• три поля для хранения имени, веса, роста
• конструктор по умолчанию, с тремя параметрами и конструктор копии;
• методы ввода/вывода информации, метод sleep (спать), при котором увеличивается рост животного, метод game (играть), при котором уменьшается вес животного, метод eat (есть), при котором увеличивается вес животного.
Создайте три объекта разными конструкторами и продемонстрируйте все методы.

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

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication26
{
    public class Animal
    {
        public string name;
        public int weight;
        public int height;
 
        public Animal(string _name, int _weight, int _height)
        {
            name = _name;
            weight = _weight;
            height = _height;
        }
 
        public void WriteAnimal()
        {
            Console.WriteLine("Имя животного: " + name);
            Console.WriteLine("Вес животного: " + weight);
            Console.WriteLine("Рост животного: " + height);
        }
 
        public void Sleep()
        {
            height = height + 5;
            Console.WriteLine("Рост животного после сна: " + height);
        }
 
        public void Game()
        {
            weight = weight - 5;
            Console.WriteLine("Вес животного после игры: " + weight);
        }
 
        public void Eat()
        {
            weight = weight + 15;
            Console.WriteLine("Вес животного после еды: " + weight);
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            Animal a = new Animal("Собака", 20, 30);
            Console.WriteLine("Первоначальные показатели животного ");
            a.WriteAnimal();
            Console.WriteLine("Показатели после сна ");
            a.Sleep();
            Console.WriteLine("Показатели после игры ");
            a.Game();
            Console.WriteLine("Показатели после еды ");
            a.Eat();
 
            Console.WriteLine();
            Console.WriteLine("---------------------------------------------");
            Console.WriteLine();
            Animal b = new Animal("Кот", 50, 30);
            Console.WriteLine("Первоначальные показатели животного ");
            b.WriteAnimal();
            Console.WriteLine("Показатели после сна ");
            b.Sleep();
            Console.WriteLine("Показатели после игры ");
            b.Game();
            Console.WriteLine("Показатели после еды ");
            b.Eat();
          
 
            Console.WriteLine();
            Console.WriteLine("---------------------------------------------");
            Console.WriteLine();
            Animal c = new Animal("Птица", 60, 20);
            Console.WriteLine("Первоначальные показатели животного ");
            c.WriteAnimal();
            Console.WriteLine("Показатели после сна ");
            c.Sleep();
            Console.WriteLine("Показатели после игры ");
            c.Game();
            Console.WriteLine("Показатели после еды ");
            c.Eat();
            Console.ReadKey();
 
 
 
        }
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.06.2015, 16:15
Ответы с готовыми решениями:

Определить конструктор без параметров, конструктор с одним параметром, конструктор с двумя параметрами, деструктор
Создать класс «матрица». Данный класс должен содержать элементы типа int, определяющие число строк,...

Не могу сделать чтобы класс содержал основной конструктор и конструктор копирования
Разработать класс ThreeAngle для работы с плоскими треугольниками. В качестве членов-данных...

Создать класс. Написать конструктор по умолчанию, конструктор с параметрами. Перегрузить операции «меньше» и «равно»
Помогите пожалуйста, хоть с одним из заданий. 1. Создать класс. Написать конструктор по...

Создать класс "Вектор" и реализовать конструктор по умолчанию, конструктор копирования и деструктор
Всем доброго времени суток! нужна ваша помощь! нужно создать класс вектор и реализовать...

10
Эксперт .NETАвтор FAQ
9410 / 4610 / 1659
Регистрация: 11.01.2015
Сообщений: 5,804
Записей в блоге: 34
30.06.2015, 16:30 2
FaNaT_96, Вам нужно сделать еще конструткор по умолчанию (т.е. без аргументов) и конструктор копирования, который принимает аргумент типа Animal и копирует оттуда поля.
1
282 / 281 / 108
Регистрация: 04.09.2010
Сообщений: 638
30.06.2015, 16:33 3
Цитата Сообщение от FaNaT_96 Посмотреть сообщение
И что такое конструктор копии?
Имеется в виду конструктор, принимающий в качестве параметра другой экземпляр этого класса.
Цитата Сообщение от FaNaT_96 Посмотреть сообщение
Так вот, хотел бы узнать, правильно ли я сделал?
На мой взгляд, вывод информации делать в классе не стоит. И вместо WriteAnimal я бы переопределил ToString().
1
18 / 18 / 15
Регистрация: 27.11.2013
Сообщений: 462
30.06.2015, 16:41  [ТС] 4
Цитата Сообщение от Storm23 Посмотреть сообщение
Вам нужно сделать еще конструткор по умолчанию (т.е. без аргументов) и конструктор копирования, который принимает аргумент типа Animal и копирует оттуда поля.
Можно самый простой пример?

Добавлено через 1 минуту
Цитата Сообщение от kesean Посмотреть сообщение
На мой взгляд, вывод информации делать в классе не стоит. И вместо WriteAnimal я бы переопределил ToString().
Почему не стоит? Мне ведь в любом случае надо какой-то метод для вывода информации писать.
0
Модератор
Эксперт .NET
5361 / 4517 / 2886
Регистрация: 20.04.2015
Сообщений: 8,173
30.06.2015, 17:22 5
Лучший ответ Сообщение было отмечено FaNaT_96 как решение

Решение

Цитата Сообщение от FaNaT_96 Посмотреть сообщение
Можно самый простой пример?
C#
1
2
3
4
5
6
public Animal(Animal animal)
{
    name = animal.name;
    weight = animal.weight;
    height = animal.height;
}
Добавлено через 5 минут
Цитата Сообщение от FaNaT_96 Посмотреть сообщение
Мне ведь в любом случае надо какой-то метод для вывода информации писать.
Переопределяем ToString
C#
1
2
3
4
public override string ToString()
{
    return string.Format("{0}, вес {1}, рост {2}", name, weight, height);
}
Теперь в Main можно выводить так:
C#
1
Console.WriteLine(c);
1
Эксперт .NETАвтор FAQ
9410 / 4610 / 1659
Регистрация: 11.01.2015
Сообщений: 5,804
Записей в блоге: 34
30.06.2015, 17:28 6
Цитата Сообщение от FaNaT_96 Посмотреть сообщение
Можно самый простой пример?
C#
1
2
3
4
5
6
7
8
9
10
11
12
        //констрктор по умолчанию
        public Animal()
        {
        }
 
        //конструткор копирования
        public Animal(Animal other)
        {
            this.name = other.name;
            this.weight = other.weight;
            this.height = other.height;
        }
1
18 / 18 / 15
Регистрация: 27.11.2013
Сообщений: 462
30.06.2015, 18:14  [ТС] 7
Цитата Сообщение от Storm23 Посмотреть сообщение
//констрктор по умолчанию
* * * * public Animal()
* * * * {
* * * * }
А можно узнать зачем эти виды конструкторов нужны? Да и конструктор по умолчанию, что он делает? Он ведь пустой... Или он является составляющей конструктора копирования?
0
Модератор
Эксперт .NET
5070 / 3980 / 1144
Регистрация: 12.10.2013
Сообщений: 11,575
Записей в блоге: 2
30.06.2015, 18:29 8
Цитата Сообщение от FaNaT_96 Посмотреть сообщение
зачем эти виды конструкторов нужны?
Чтобы создавать объекты одного типа, но в разных начальных состояниях.
Цитата Сообщение от FaNaT_96 Посмотреть сообщение
конструктор по умолчанию, что он делает?
Просто создает объект, где все его поля-свойства имеют значения по умолчанию.
Цитата Сообщение от FaNaT_96 Посмотреть сообщение
он является составляющей конструктора копирования?
Нет, это тут не при чем.
1
18 / 18 / 15
Регистрация: 27.11.2013
Сообщений: 462
30.06.2015, 18:43  [ТС] 9
Получается, мне просто добавить два этих вида конструкторов к моему коду и все? Или с ними ещё надо как-то работать?
0
Модератор
Эксперт .NET
5361 / 4517 / 2886
Регистрация: 20.04.2015
Сообщений: 8,173
30.06.2015, 18:59 10
Цитата Сообщение от FaNaT_96 Посмотреть сообщение
просто добавить два этих вида конструкторов к моему коду и все?
Ну с конструктором по умолчанию работать не получится, в нем поля не инициализируются, а методов ввода значений полей или свойств с ними связанных нет.
Тем более в задании сказано:
Цитата Сообщение от FaNaT_96 Посмотреть сообщение
методы ввода/вывода информации
А с конструктором копирования можно работать, например создать новую птицу с такими же значениями полей как и у старой.
1
282 / 281 / 108
Регистрация: 04.09.2010
Сообщений: 638
30.06.2015, 19:59 11
Цитата Сообщение от FaNaT_96 Посмотреть сообщение
Почему не стоит?
Скажем так: в данном конкретном контексте подобное решение, возможно, имеет право на жизнь. И то, только потому, что Ваш класс имеет прямой доступ к консоли (в противном случае пришлось бы либо прикручивать эвенты, либо передавать ссылку на вызывающий класс).
Мое имхо, вызывающий класс должен сам считывать данные.
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.06.2015, 19:59

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Добавить конструктор в класс
Просьба помочь, не совсем понимаю, что должно получиться Задание: Допишите конструктор в...

Класс, конструктор-копирования
Здравствуйте, я плохо знаю С++ и поэтому у меня возникла проблема с одной задачей, звучит она так:...

Класс: конструктор и деструктор
Возник вопрос. Если я в классе не делаюни одного данного с выделением динамической памяти, то как...

Добавить конструктор в наследуемый класс
Добрый день, Я хочу добавить добавить конструктор в такой способ public class...

Как вставить в конструктор А класс В
здравствуйте! помогите,знаний не хватает.делаю упражнение по дейтелам. суть-в класс...

Класс, конструктор, деструктор и прочее
Добрый день. Есть задание: Написать программу работы с матрицами (матрица представляет собой...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.