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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.09.2015, 15:38   #1
max_prorok
Форумчанин
 
Регистрация: 06.10.2011
Сообщений: 181
По умолчанию Производные и базовые классы

Итак, у меня созрел очередной вопрос, в котором хочу разобраться, потому что есть момент, в котором я не догоняю.
Итак, я создаю базовый и производный класс.
Код:
class FirstClass
    {
        private string name;
        public FirstClass()
        {
            this.name = "Empty";
        }
        protected FirstClass(string name)
        {
            this.name=name;
        }
        public string NameOutput()
        {
            return name;
        }
    }
class SecondClass : FirstClass
    {
        private int age;

        public SecondClass():base("no_name")
        {
            age = 20;
        }
        public string AgeOutput()
        {
            return age.ToString();
        }
    }
Потом в мэйне создаю экземпляр базового класса и вызываю для него конструктор производного класса. В итоге метод производного класса мне не доступен (судя по всему, потому что экземпляр базового класса), однако GetType возвращает мне, что тип этого экземпляра - производный класс. И что к чему? Что-то меня здесь и заклинило.
Код:
class Program
    {
        static void Main(string[] args)
        {
            FirstClass q = new SecondClass();
            Console.WriteLine(q.NameOutput());
            Console.WriteLine(q.GetType());
            Console.ReadLine();
            return;
        }
    }
Так какой это тип? Пробовал приравнять экземпляр производного класса к этому, и компилятор выдает ошибку, что невозможно явное преобразование.

Последний раз редактировалось max_prorok; 10.09.2015 в 15:40.
max_prorok вне форума Ответить с цитированием
Старый 10.09.2015, 15:45   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

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

Цитата:
Итак, я создаю базовый и производный класс.
Не создаете, а описываете.

Цитата:
Потом в мэйне создаю экземпляр базового класса и вызываю для него конструктор производного класса.
Нет, вы создаете объект производного. А не базового, вызывая для него конструктор производного - забывайте эту бредовую фразу.

Последний раз редактировалось p51x; 10.09.2015 в 15:48.
p51x вне форума Ответить с цитированием
Старый 10.09.2015, 16:12   #3
max_prorok
Форумчанин
 
Регистрация: 06.10.2011
Сообщений: 181
По умолчанию

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

И да, спасибо за исправления, постараюсь овладеть общей грамотностью описания программирования.=)

Последний раз редактировалось max_prorok; 10.09.2015 в 16:15.
max_prorok вне форума Ответить с цитированием
Старый 10.09.2015, 16:23   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
Тогда если я правильно понял, то абстрактный класс в принципе тоже самое что и интерфейс, только с возможностью добавления полей, которые будут общие у производных классов?
Формально почти, т.к. интерфейсы, формально, это описание методов, а в абстрактном классе с++ могут быть и реализации.
p51x вне форума Ответить с цитированием
Старый 10.09.2015, 16:27   #5
max_prorok
Форумчанин
 
Регистрация: 06.10.2011
Сообщений: 181
По умолчанию

Ну я рассматриваю на примере C#, т.к. читаю книгу именно по шарпу. И там реализации абстрактных методов описывать нельзя - это возложено на переопределение членов-функций в производных классах.
max_prorok вне форума Ответить с цитированием
Старый 10.09.2015, 16:34   #6
max_prorok
Форумчанин
 
Регистрация: 06.10.2011
Сообщений: 181
По умолчанию

Ну я рассматриваю на примере C#, т.к. читаю книгу именно по шарпу. И там реализации абстрактных методов описывать нельзя - это возложено на переопределение членов-функций в производных классах.
max_prorok вне форума Ответить с цитированием
Старый 10.09.2015, 16:45   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Про абстрактный методы (чисто виртуальныв С++) никто и не говорил. Я говорил, что абстрактный классы могут быть частично реализованы, т.е. иметь как абстрактные методы так и обычные.
p51x вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Производные классы С# Sergey_gorobets Помощь студентам 12 31.03.2013 13:37
производные классы missg C++ Builder 15 10.04.2012 18:16
Базовые классы в с++ Banner Помощь студентам 1 31.03.2011 23:43
С++ Производные классы (Ошибка) Sweta Помощь студентам 9 23.04.2008 12:58
базовые и производные классы (В чём моя ошибка) umnix Общие вопросы C/C++ 5 01.12.2007 17:26