Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2017, 01:08   #1
artems67
Пользователь
 
Регистрация: 17.11.2015
Сообщений: 62
Восклицание Проблема с наследованием поля

ТЗ:
Описать класс, реализующий десятичный счетчик, который может увеличивать или уменьшать свое значение на единицу в заданном диапазоне. Предусмотреть инициализацию счетчика значениями по умолчанию и произвольными значениями. Счетчик имеет два метода: увеличения и уменьшения, — и свойство, позволяющее получить его текущее состояние. При выходе за границы диапазона выбрасываются исключения. Написать программу, демонстрирующую все разработанные элементы класса. Создать дочерний класс Счетчик1, который может увеличивать или уменьшать свое значение на любое введенное число в заданном диапазоне.


У меня есть 2 счетчика. schetchik и наследник schetchik1. Мне нужно задействовать поле int pos2 из класса schetchik в schetchik1. В методе Initisilize из текстбоксов формы берутся значения. int pos2 присваивается значение pos1. Поставил модификатор доступа protected. Но у меня там выводит 0 в форму через свойство Pos2 в классе наследнике schetchik1. В чем проблема ?

Класс schetchik:

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    class schetchik
    {
        protected int max, min, pos1, pos2, step;

        public void Initisilize(int max, int min, int pos1, int step)
        {
            if (pos1 < min || pos1 > max)
            {
                MessageBox.Show("Позиция счетчика выходит за диапазон", "Обработка исключения", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }
            else
            {
                this.max = max;
                this.min = min;
                this.pos1 = pos1;
                this.pos2 = this.pos1;
                this.step = step;
            }
            

        }

        public void Check()
        {
            int max = 10;
            int min = 0;
            int pos1 = 5;
            int step = 2;
            Initisilize(max, min, pos1,step);
        }

        public void Add()
        {
            if (pos1 < max)
            {
                ++pos1;
            }
            else
            {
                MessageBox.Show("Счетчик выходит за диапазон", "Обработка исключения", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }
        }

        public void Remove()
        {
            if ( pos1 > min)
            {
                --pos1;
            }
            else
            {
                MessageBox.Show("Счетчик выходит за диапазон", "Обработка исключения", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }
        }

        public int Pos1
        {
            get { return pos1; }
        }
    }
}
Класс наследник schetchik1:

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    class schetchik1 : schetchik
    {
        public void Add_step()
        {
            if (pos2 < max)
            {
                pos2=pos2+step;
            }
            else
            {
                MessageBox.Show("Счетчик выходит за диапазон", "Обработка исключения", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }
        }
        public void Remove_step()
        {
            if (pos2 > min)
            {
                pos2=pos2-step;
            }
            else
            {
                MessageBox.Show("Счетчик выходит за диапазон", "Обработка исключения", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }
        }
        public int Pos2
        {
            get { return pos2; }
        }
    }
}
Изображения
Тип файла: png Безымянный.png (24.6 Кб, 66 просмотров)

Последний раз редактировалось artems67; 07.12.2017 в 01:11.
artems67 вне форума Ответить с цитированием
Старый 07.12.2017, 08:32   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Ну значит при инициализации ноль попадает из текстбокса.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 07.12.2017, 08:54   #3
artems67
Пользователь
 
Регистрация: 17.11.2015
Сообщений: 62
По умолчанию

Цитата:
Сообщение от WorldMaster Посмотреть сообщение
Ну значит при инициализации ноль попадает из текстбокса.
Не может такого быть значение Pos1 считывается из Тексбокса с лейблом "начальная позиция", а там при запуске приложения всегда по умолчанию ставится значение 5. И для класса schetchik оттуда всё корректно считывается.

Вот мой код формы, с коментариями поясняющами какая кнопка за что отвечает. Вроде сделано всё по уму. При загрузке формы происходит метод иницилизации для schetchik и он считывает все необходимые параметры из текстбоксов формы, в которых уже вбиты дефолтные значения при загрузке формы. По идеи всё тоже самое относится и к наследнику schetchik1. Но почему-то он при вызове свойства Pos2 выводит 0.

Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;


namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            
        }

        schetchik schet = new schetchik();
        schetchik1 schet1 = new schetchik1();
        
        private void Form1_Load(object sender, EventArgs e) // Загрузка формы
        {

            schet.Initisilize(Convert.ToInt32(textBox2.Text), Convert.ToInt32(textBox1.Text), Convert.ToInt32(textBox7.Text), Convert.ToInt32(textBox4.Text));
            textBox5.Text = Convert.ToString(schet.Pos1);
            textBox6.Text = Convert.ToString(schet1.Pos2);
        }

        private void button1_Click(object sender, EventArgs e) // Кнопка увеличить в групбоксе счетчик
        {

                schet.Add();
                textBox5.Text = Convert.ToString(schet.Pos1);
           

        }

        private void button2_Click(object sender, EventArgs e) // Кнопка уменьшить в групбоксе счетчик
        {
            schet.Remove();
            textBox5.Text = Convert.ToString(schet.Pos1);

        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e) // Проверка изменения чекбокса "По умолчанию"
        {   // Сброс значений к начальным-дефолтным
            if (checkBox1.Checked == true)
            {
                schet.Check();
                textBox1.Text = "0";
                textBox2.Text = "10";
                textBox7.Text = "5";
                schet.Initisilize(Convert.ToInt32(textBox2.Text), Convert.ToInt32(textBox1.Text), Convert.ToInt32(textBox7.Text), Convert.ToInt32(textBox4.Text));
                textBox5.Text = Convert.ToString(schet.Pos1);

            }

        }



        private void button5_Click(object sender, EventArgs e) // Применение новых настроек диапазона и начальной позиции счетчика
        {
            if (checkBox1.Checked == true)
            {
                MessageBox.Show("Снимите галочку по умолчанию", "Обработка исключения", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }
            else
            {
                if ((textBox1.Text != "") && (textBox2.Text != "") && (textBox7.Text != ""))
                {
                    schet.Initisilize(Convert.ToInt32(textBox2.Text), Convert.ToInt32(textBox1.Text), Convert.ToInt32(textBox7.Text), Convert.ToInt32(textBox4.Text));
                    textBox5.Text = Convert.ToString(schet.Pos1);
                }
                else
                {
                    MessageBox.Show("Не все поля заполнены", "Обработка исключения", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                }
            }
            
        }

        private void button3_Click(object sender, EventArgs e) // Кнопка увелечить в групбоксе Счетчик1
        {
            schet1.Add_step();
            textBox6.Text = Convert.ToString(schet1.Pos2);

        }


    }

}
artems67 вне форума Ответить с цитированием
Старый 07.12.2017, 09:50   #4
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

отладчиком пользоваться умете??
Пройдите по шагам с момента загрузки. Посмотрите как проходит функция инициализации.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с наследованием в Qt (ошибка компиляции) Xuch Qt и кроссплатформенное программирование С/С++ 5 09.02.2017 10:43
Пожалуйста помогите чайнику с наследованием OAK1985 C# (си шарп) 6 13.01.2014 14:23
Проблема с наследованием NickolayNest Общие вопросы по Java, Java SE, Kotlin 3 19.01.2012 23:05
Проблема с множественным наследованием Angryant Общие вопросы C/C++ 3 25.12.2011 16:48
Проблема с наследованием! Shepard90 Общие вопросы C/C++ 1 16.12.2010 18:46