2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 И наследник, и атрибут
Сообщение02.11.2008, 15:39 
Не очень понимаю ОО-парадигму, и синтаксис разных поддерживающих её языков успел подзабыть.

Вот такой вопрос: может ли класс В быть наследником класса A, и при этом чтобы объекты класса A имели свойство, значением которого были бы объекты класса B?

Если да, то как это объявить (желателен пример не на С++)?

 
 
 
 
Сообщение02.11.2008, 15:48 
Код:
struct b_t;

struct a_t {
  virtual b_t copy_b() = 0;
};

struct b_t : a_t {
  virtual b_t copy_b() { return *this; }
};
Это?

 
 
 
 
Сообщение02.11.2008, 22:49 
вздымщик Цыпа писал(а):
Код:
struct b_t;

struct a_t {
  virtual b_t copy_b() = 0;
};

struct b_t : a_t {
  virtual b_t copy_b() { return *this; }
};
Это?


Не знаю я этого наречия тоже :oops:

Можно даже обобщить вопрос и попытаться заполнить плюсами и минусами вот такую табличку:

\begin{tabular}{c|c|c|}
                   & А наследует В & В наследует A \\ \hline
А имеет свойство B &               &      ~        \\ \hline
B имеет свойство A &               &      ~        \\ \hline
\end{tabular}

Плюс означал бы: да, возможно, и вот вам пример. Минус означал бы: увы, это принципиально невозможно.

 
 
 
 
Сообщение02.11.2008, 23:37 
luitzen в сообщении #155436 писал(а):
Не знаю я этого наречия тоже
Это был пример на C++, как Вы и просили.

В не понимаю, чего Вы хотите с этой табличкой. Может Вы объясните поконкретнее, какую задачу Вы решаете?

 
 
 
 
Сообщение03.11.2008, 09:57 
Аватара пользователя
Вообще-то автор просил пример не на C++.

 
 
 
 
Сообщение03.11.2008, 21:13 
Аватара пользователя
Вот пример на C#:

Код:
namespace MyNamespace
{
    public class A
    {
        public B bProperty
        {
            get;
            set;
        }
    }

    public class B : A
    {
    }
}


Третий столбец Вашей таблички лишний, ибо новых знаний Вам не прибавит. Второй столбец должен иметь значения "Да" в обеих ячейках в любом ОО языке программирования.

 
 
 
 
Сообщение03.11.2008, 22:43 
Действительно, третий столбец ни к чему :oops:

А пример на Java можно привести?

 
 
 
 
Сообщение03.11.2008, 23:51 
Аватара пользователя
Давненько я на Java не писал. Под рукой компилятора (для проверки) нет. Но будет примерно так:
Код:
public class A
{
    public B bProperty;
}

public class B extends A
{
}


З.Ы. Сейчас качну Java - проверю.
З.Ы. З.Ы. Память не подвела!
З.Ы.З.Ы.З.Ы. Довольно часто встречающаяся ситуация. Пример: А - mere mortal сотрудник, В - руководитель. У руководителя м.б. дополнительные атрибуты в сравнении с сотрудником, а сотрудник имеет ссылку на руководителя.

 
 
 [ Сообщений: 8 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group