Вопросы с тегами [inheritance]

1

голосов
2

ответ
35

Просмотры

Using alternative super class constructor in child class instantiation

У меня есть базовый класс с двумя конструкторами, и дочерний класс, который имеет один конструктор. Можно ли создать экземпляр класса ребенка с помощью второго конструктора базового класса? Пример код: абстрактный класс RuleCondition (правило: Правило, поле: String, равный: Boolean, перевернутый: Boolean) {// альтернативный конструктор с RuleValue вместо статического значения Comparation четкости (это правило: Правило, поля: String, исй: RuleValue, равна: Boolean = ложь, инвертируется: Boolean = ложь) = ??? } Класс RuleConditionAbove (правило: Правило, поле: String, comparationValue: Длинные, равно: Boolean = ложь, перевернутый: Boolean = ложь) продолжается RuleCondition (правило, поле, равное, перевернутый) {// ...} Теперь я могу делать это: вал myAboveCondition = новый RuleConditionAbove (правило, "ли", 10, правда, ложь), но я не могу это сделать: Вэл myAboveCondition = новый RuleConditionAbove (правило, "л", RuleValue (...), правда, ложь), так как альтернативный конструктор RuleCondition базового класса не видно. Это будет видно, как только я добавить это дочерний класс: Защита этого (правило: Правило, поля: String, реф: RuleValue, равный: Boolean = ложь, перевернутый: Boolean = False) = это (правило, поле, хол, равным , перевернутый) будет ли это единственный / обычный способ решения этой проблемы, или есть что-то умное, который включает в себя меньше копии & прошлом код? (Так как у меня есть тонны дочерних классов одного и того же рисунка) [править] Для того, чтобы уточнить, второй конструктор будет таким же в каждом дочернем классе, таким образом, я хотел бы, чтобы он реализован только один раз в базовом классе. Однако до сих пор приходится ставить другой конструктор в каждом дочернем классе победит эту цель какой-то образом, и, таким образом, я не имел бы два конструктора базовый класс, а скорее только во всех дочерних классах. истина, ложь), так как альтернативный конструктор RuleCondition базового класса не виден. Это будет видно, как только я добавить это дочерний класс: Защита этого (правило: Правило, поля: String, реф: RuleValue, равный: Boolean = ложь, перевернутый: Boolean = False) = это (правило, поле, хол, равным , перевернутый) будет ли это единственный / обычный способ решения этой проблемы, или есть что-то умное, который включает в себя меньше копии & прошлом код? (Так как у меня есть тонны дочерних классов одного и того же рисунка) [править] Для того, чтобы уточнить, второй конструктор будет таким же в каждом дочернем классе, таким образом, я хотел бы, чтобы он реализован только один раз в базовом классе. Однако до сих пор приходится ставить другой конструктор в каждом дочернем классе победит эту цель какой-то образом, и, таким образом, я не имел бы два конструктора базовый класс, а скорее только во всех дочерних классах. истина, ложь), так как альтернативный конструктор RuleCondition базового класса не виден. Это будет видно, как только я добавить это дочерний класс: Защита этого (правило: Правило, поля: String, реф: RuleValue, равный: Boolean = ложь, перевернутый: Boolean = False) = это (правило, поле, хол, равным , перевернутый) будет ли это единственный / обычный способ решения этой проблемы, или есть что-то умное, который включает в себя меньше копии & прошлом код? (Так как у меня есть тонны дочерних классов одного и того же рисунка) [править] Для того, чтобы уточнить, второй конструктор будет таким же в каждом дочернем классе, таким образом, я хотел бы, чтобы он реализован только один раз в базовом классе. Однако до сих пор приходится ставить другой конструктор в каждом дочернем классе победит эту цель какой-то образом, и, таким образом, я не имел бы два конструктора базовый класс, а скорее только во всех дочерних классах. ложь), так как альтернативный конструктор RuleCondition базового класса не видно. Это будет видно, как только я добавить это дочерний класс: Защита этого (правило: Правило, поля: String, реф: RuleValue, равный: Boolean = ложь, перевернутый: Boolean = False) = это (правило, поле, хол, равным , перевернутый) будет ли это единственный / обычный способ решения этой проблемы, или есть что-то умное, который включает в себя меньше копии & прошлом код? (Так как у меня есть тонны дочерних классов одного и того же рисунка) [править] Для того, чтобы уточнить, второй конструктор будет таким же в каждом дочернем классе, таким образом, я хотел бы, чтобы он реализован только один раз в базовом классе. Однако до сих пор приходится ставить другой конструктор в каждом дочернем классе победит эту цель какой-то образом, и, таким образом, я не имел бы два конструктора базовый класс, а скорее только во всех дочерних классах. ложь), так как альтернативный конструктор RuleCondition базового класса не видно. Это будет видно, как только я добавить это дочерний класс: Защита этого (правило: Правило, поля: String, реф: RuleValue, равный: Boolean = ложь, перевернутый: Boolean = False) = это (правило, поле, хол, равным , перевернутый) будет ли это единственный / обычный способ решения этой проблемы, или есть что-то умное, который включает в себя меньше копии & прошлом код? (Так как у меня есть тонны дочерних классов одного и того же рисунка) [править] Для того, чтобы уточнить, второй конструктор будет таким же в каждом дочернем классе, таким образом, я хотел бы, чтобы он реализован только один раз в базовом классе. Однако до сих пор приходится ставить другой конструктор в каждом дочернем классе победит эту цель какой-то образом, и, таким образом, я не имел бы два конструктора базовый класс, а скорее только во всех дочерних классах.
user826955
1

голосов
4

ответ
296

Просмотры

Подпорные аргументы передаются в конструктор суперкласса

В Scala никаких методов не может быть использовано на текущем экземпляре, когда конструктор суперкласса вызывается. Таким образом, нет никакой возможности для метода, который будет вызван, который будет запоминать значение, которое он возвращается, в текущем экземпляре. Как я могу сохранить аргументы, полученные дать конструктора суперкласса, в то же время с помощью наследования, в отличие от композиции, и без изменения исходного кода класса я наследует от?
Robin Green
1

голосов
0

ответ
112

Просмотры

Can Java recognize a type parameter, T, as a super type of some class?

Справочная информация: У меня есть 3 класса: A, B, C, где они все проходит «Супер» и инвентарем «Interface», и я хочу, чтобы написать код, который только использует только методы от «Супер» и «интерфейс» К сожалению, я не иметь контроль над исходным кодом A, B, C, «супер», «Интерфейс», чтобы изменить цепочку наследования, поэтому мой следующий подход заключается в использовании дженериков. Я на Java 6. Это то, что я и В и С, используются в других местах: пустота myMethodA () {@SuppressWarnings ( «флажок») Испытание Т = (Т) Гета (); } Если удалить бросок (T), Eclipse дает тип ошибки несоответствия: не может конвертировать от А до Т Если я держу бросание, тип безопасности: Переполнение отливать от А до Т Мой вывод был «Затмение (или Javac) не признать T как супер типа, как А. Для подтверждения Я изменен на Т расширяет Несвязанным & интерфейс. Затмение дал ошибка не может бросить от А до Т. Мой второй вывод был, «Затмение можно сказать, что T не супер типа А» Теперь я смущен, потому что мои выводы противоречат друг другу. Вопрос: Можно ли / ли Eclipse (или Javac) распознает параметр типа как супер типа класса? 2.а Если да, то почему я должен бросить с (Т), чтобы удалить ошибку и все еще получить предупреждение? 2б Если нет, то как Eclipse, дает ошибку, когда T меняется на T расширяет Unrelated и интерфейс? почему я должен бросить с (Т), чтобы удалить ошибку и все еще получить предупреждение? 2б Если нет, то как Eclipse, дает ошибку, когда T меняется на T расширяет Unrelated и интерфейс? почему я должен бросить с (Т), чтобы удалить ошибку и все еще получить предупреждение? 2б Если нет, то как Eclipse, дает ошибку, когда T меняется на T расширяет Unrelated и интерфейс?
Sgene9
1

голосов
0

ответ
160

Просмотры

JAVA Как работает наследование под капотом?

Как наследование работает под капотом в Java? Что JVM сделать для того, чтобы accompish наследства? Когда объект создается и хранится в куче это содержащего код суперкласса? Это вся магия?
dBio
1

голосов
0

ответ
55

Просмотры

namespaces in class inheritance in php

I have been trying to undertand this with no light. This is my scenario: Files and folders: ---> Controller (dir) ------> baseController.php ------> extController.php ------> admin (dir) ---------> user.php ------> user (dir) ---------> user.php Files content: baseController.php namespace controller; class baseController { . ..... .... } extController.php namespace controller; class extController extends baseController { . ..... .... } admin\user.php namespace controller\admin; class user extends \controller\extController { . ..... .... } user\user.php namespace controller\user; class user extends \controller\extController { . ..... .... } If I call to a method in admin namespace user class I got: Fatal error: Class 'controller\extController' not found in C:\xampp\htdocs\xxxxxxxx_com\src\controller\admin\user.php on line 6 What I'm doing wrong?
Carlos
1

голосов
1

ответ
67

Просмотры

Instantiate superclass variable in Java

I have an abstract class which contains a variable 'name' that I want my child classes to initialize. Which of these would be the best way to do so. Option 1. Use superclass constructor for initialization @Getter abstract class A { private final String name; protected A(String name) { this.name = name; } } class B extends A { private static final NAME = "Raylan"; private final int age; public B(int age) { super(NAME); this.age = age; } } Option 2. Use a getter method. abstract class A { private final String name; public abstract String getName(); } class B extends A { private static final NAME = "Raylan"; private final int age; public B(int age) { this.age = age; } @Override public String getName() { return NAME; } }
zeke00757
1

голосов
2

ответ
124

Просмотры

C ++ Конструкторы копирования и присваивания в иерархии Cloneable

Существует хорошо известный клон идиома для копирования производных объектов через указатель на базовый класс. Базовый класс {INT б; общественности: виртуальный клон unique_ptr () Const = 0; Виртуальный ~ Base () = по умолчанию; }; класс Derived: открытая база {INT d; общественности: виртуальный клон unique_ptr () Const переопределение {вернуть зЬй :: make_unique (* это); }} Однако, я не могу найти четкие инструкции, как определить конструкторы копирования и задания в этом случае. Это, как я предполагаю, что это должно быть сделано в базовом классе: Базовый класс {защищен: Base (Const Base &) = по умолчанию; частная: Base & оператор = (Const Base &) = удалить; } Это необходимо (для того, чтобы избежать возможных срезов)? Является ли это правильный способ сделать это? Имеет ли хватит его или я должен добавить такие заявления производного класса, а?
Dmitry J
-2

голосов
3

ответ
44

Просмотры

Общий интерфейс наследования в Java

Я создал интерфейс в Java с помощью следующего метода: интерфейс ReaderInterface {общественности Карты выборки (K ID); Карта общественного fetchAll (); } Затем я создал класс, который реализующий этот интерфейс: Класс JSONreaderImpl реализует ReaderInterface {общественности Карта fetchAll () {// Этот компилятор позволяет быть переопределение от интерфейса \} публичная карта выборки (String ID) {// Это не рассматривается как метод коррекции, компилятор бросает ошибку реализовать метод выборки}} Мой вопрос вот почему fetchAll метод рассматривается как метод коррекции на его создание на конкретном классе и почему не заманишь метод. Не могли бы вы помочь мне понять это?
user35253
1

голосов
0

ответ
103

Просмотры

Can not access a subclass method from a superclass

Я занимался объектно-ориентированным программированием домашнего задания и я застрял где-то. Мы были в основном сказали сделать телефонную книгу. Он имеет класс PhoneNumber, который расширяет класс ContactInfo. Существует также класс PhoneBookEntry, который содержит ArrayList из ContactInfo objects.In класс PhoneBookEntry там должен быть метод, называемый displayPhoneNumbers (). И домашнее задание говорит: displayPhoneNumbers (): Печатает все номера телефонов в contactInfos. Ну, чтобы отобразить номер телефона, я должен быть в состоянии получить доступ к объекту PhoneNumber, но все, что я имею в классе PhoneBookEntry список объектов CONTACTINFO, которые не могут иметь номер телефона в нем. общественного класса PhoneBookEntry {частное имя строки; ArrayList contactInfos; общественного PhoneBookEntry () {contactInfos = новый ArrayList (); } общественного недействительными displayPhoneNumbers () {для (INT I = 0;
Mertcan Seğmen
1

голосов
2

ответ
35

Просмотры

c++ using std:string v char* in a base class - base class has a redudant copy of the string

В приведенном ниже классе из этого учебника он говорит, что вы можете также сделать m_speak в зОм :: строку, но недостаток этого является то, что каждое животное будет содержать избыточную копию «говорить» Я пытаюсь понять, как бы использовать строку вместо полукокса * только создать избыточную копию строки, а не символ *. #include #include класс Animal {защищен: станд :: строка m_name; Const символ * m_speak; // Мы делаем этот конструктор защищен, потому что // мы не хотим, чтобы люди, создающие объекты Animal непосредственно, // но мы все еще хотим производные классы, чтобы иметь возможность использовать его. Animal (имя станда :: строка, Const символ * говорит): m_name (имя), m_speak (говорят) {} общественность: станд :: строка GetName () {возвращение m_name; } Const символ * говорят () {возвращение m_speak; }}; Класс Cat: общественное животное {общественности: Cat (станд :: Имя строки): Animal (имя, "Мяу") {}}; класс собаки: общественные животные {общественности: Собака (имя станда :: строка): Animal (имя, "Гав") {}};
arcoxia tom
1

голосов
0

ответ
60

Просмотры

Exposing correct factory classes to lua

Так что я пишу заводскую систему для создания объектов и использования Lua, чтобы назвать их. однако я изо всех сил, чтобы выяснить, как подвергать их Lua с помощью luaBridge. У меня есть шаблон фабрики: шаблон {T * создать (имя Id) {} ​​аннулируются регистр (Id имя, BaseCreator * FUNC)}} станд :: Карта FunctionMap; } Функция регистра называет унаследовал шаблон создать класс, который является производным от виртуального создания для создания объектов определенного типа, который является производным от базового объекта. Класс BaseObject {виртуальная пустота привет () = 0;} класс DerivedObject: общественные BaseObject {недействительными привет ()} Класс шаблона BaseCreator {виртуальный Т * создать = 0; } Шаблонного класса DerivedCreator {Base * Создать () {вернуть новый полученным; }} В C ++ завод используется следующим образом: Фабрика objMap; objmap.register ( «Obj1», новый DerivedCreator; BaseObject * Temp = objMap.create ( «obj1») Должен ли я подвергать виртуальные базовые классы, такие как BaseObject и BaseCreator в Lua для того, чтобы я создавать свои производные типы с помощью Lua ? Я попытался это и я получаю ошибку о создании абстрактного объекта. есть ли способ обойти это, если у меня есть, чтобы выставить бас классов или есть другой язык сценариев больше подходит для работы с этой задачей? Должен ли я подвергать виртуальные базовые классы, такие как BaseObject и BaseCreator в Lua для того, чтобы я создавать свои производные типы с помощью Lua? Я попытался это и я получаю ошибку о создании абстрактного объекта. Есть ли способ обойти это, если у меня есть, чтобы выставить бас классов или есть другой язык сценариев больше подходит для работы с этой задачей? Должен ли я подвергать виртуальные базовые классы, такие как BaseObject и BaseCreator в Lua для того, чтобы я создавать свои производные типы с помощью Lua? Я попытался это и я получаю ошибку о создании абстрактного объекта. Есть ли способ обойти это, если у меня есть, чтобы выставить бас классов или есть другой язык сценариев больше подходит для работы с этой задачей?
yik
1

голосов
2

ответ
81

Просмотры

Pairing derived class two by two in proper way

Предполагая, что эти классы: общественный абстрактный класс Существо {общественный абстрактный ИНТ МАКСЛЕВЕЛ {получить; }} Общественного абстрактного класса NormalCreature: Существо {общественный абстрактный тип Мутация {получить; } Общественного переопределение INT МАКСЛЕВЕЛ {получить {вернуться 50; }}} Общественного абстрактного класса MutantCreature: Creature {общественный абстрактный базовый тип {получить; } Общественного переопределение INT МАКСЛЕВЕЛ {получить {вернуться 70; }}} Общественного запечатаны класса Human: NormalCreature {общественного переопределение типа Мутация {получить {вернуться TYPEOF (сверхчеловеческих); }} ...} общественного запечатанного класс Superhuman: MutantCreature {общественного переопределение типа Base {получить {возвращение TYPEOF (человек); }} ...} общественного запечатанный класс Карлик: NormalCreature {общественного переопределение типа Мутация {получить {вернуться TYPEOF (DwarfOnADonkey); }} Общественного недействительными SwimLikeADolphin () {...} ... } Общественного запечатанный класс DwarfOnADonkey: MutantCreature {общественного переопределение типа Base {получить {возвращение TYPEOF (Dwarf); }} // больше не может SwinLikeADolphin (), поэтому DwarfOnADonkey не heritate Dwarf общественности недействительным JumpOverTwentyFeet () {...} ...} ... Как я мог достичь этого, получая соединение от каждого NormalCreature к MutantCreature , и наоборот, без дублирования кода? (Если человек мутирует в сверхчеловеческий, то я мог знать, что Superhuman является мутацией человека, без указания его) я также думал о другом классе, соединяя их с кортежем или массивом [2], но я действительно не нравится это решение. Я тоже думал об атрибутах, но я не знаю, если это может сделать работу ни как использовать их должным образом. }} // больше не может SwinLikeADolphin (), поэтому DwarfOnADonkey не heritate Dwarf общественности недействительным JumpOverTwentyFeet () {...} ...} ... Как я мог достичь этого, получая соединение от каждого NormalCreature к MutantCreature , и наоборот, без дублирования кода? (Если человек мутирует в сверхчеловеческий, то я мог знать, что Superhuman является мутацией человека, без указания его) я также думал о другом классе, соединяя их с кортежем или массивом [2], но я действительно не нравится это решение. Я тоже думал об атрибутах, но я не знаю, если это может сделать работу ни как использовать их должным образом. }} // больше не может SwinLikeADolphin (), поэтому DwarfOnADonkey не heritate Dwarf общественности недействительным JumpOverTwentyFeet () {...} ...} ... Как я мог достичь этого, получая соединение от каждого NormalCreature к MutantCreature , и наоборот, без дублирования кода? (Если человек мутирует в сверхчеловеческий, то я мог знать, что Superhuman является мутацией человека, без указания его) я также думал о другом классе, соединяя их с кортежем или массивом [2], но я действительно не нравится это решение. Я тоже думал об атрибутах, но я не знаю, если это может сделать работу ни как использовать их должным образом. и наоборот, без дублирования кода? (Если человек мутирует в сверхчеловеческий, то я мог знать, что Superhuman является мутацией человека, без указания его) я также думал о другом классе, соединяя их с кортежем или массивом [2], но я действительно не нравится это решение. Я тоже думал об атрибутах, но я не знаю, если это может сделать работу ни как использовать их должным образом. и наоборот, без дублирования кода? (Если человек мутирует в сверхчеловеческий, то я мог знать, что Superhuman является мутацией человека, без указания его) я также думал о другом классе, соединяя их с кортежем или массивом [2], но я действительно не нравится это решение. Я тоже думал об атрибутах, но я не знаю, если это может сделать работу ни как использовать их должным образом.
1

голосов
0

ответ
78

Просмотры

C ++ наследования Многоуровневого регулировка указателя объекта преобразователя

Рассмотрим следующий код с 3 уровня множественного наследования иерархия. авто адр = [] (авто v) -> uint64_t {возвращение * reinterpret_cast (v); }; BaseA структуры {аннулируется виртуальным а () {}}; BaseB структуры {аннулируется виртуальный б () {}}; Struct BASEC: BaseA, BaseB {недействительными виртуальный а () {} переопределение недействительными виртуальный б () переопределение {}}; структура на основе {недействительным виртуальный д () {}}; BaseE структуры: на основе, BASEC {недействительным виртуального д () {} переопределить недействительный виртуальный а () {} переопределение недействительного виртуальный б () {переопределение автоматического а = это; станд :: соиЬ б (); станд :: соиЬ
Roman Smyrnov
1

голосов
0

ответ
27

Просмотры

Functional any difference between using Object.create and simply reassigning to prototype? [duplicate]

Этот вопрос уже есть ответ здесь: Преимущества использования `Object.create` наследования 4 ответов Почему я не стало бы использовать Child.prototype = Parent.Prototype, а не Child.prototype = новый Parent (); для наследования JavaScript? 3 ответов мне было интересно, если есть какая-то разница между использованием Object.create () и просто переназначить? Используя Object.create () функция Rectangle (длина, ширина) {this.length = длина; this.width = ширина; } Функция площади (размер) {this.length = размер; this.width = размер; } Square.prototype = Object.create (Rectangle.prototype, {конструктор: {настраивается: верно, перечислимы: истинно, значение: квадрат, записываемый: истинно}}); Переназначение функции Rectangle (длина, ширина) {this.length = длина; this.width = ширина; } Функция площади (размер) {this.length = размер; this.width = размер; } Square.prototype = Rectangle.prototype; Square.prototype.constructor = площадь;
akotch
1

голосов
0

ответ
100

Просмотры

Ковариантный (уходит) и универсальный тип Kotlin

В Java я могу сделать это: интерфейс BaseInterface {} Интерфейс ExtendsInterface расширяет BaseInterface {} Интерфейс ProblemInterface общественных {аннулируются метод (Е BaseInterface); } Класс Основное {государственной статической силы основных (String [] арг) {ProblemInterface problemInterfaceExtendsInterface = новый ProblemInterface () {@Override общественного недействительными метод (ExtendsInterface BaseInterface) {}}; ProblemInterface
user2855001
1

голосов
3

ответ
63

Просмотры

Confused на Prototype наследования Javascript

Я нашел эту картину здесь В этом случае Foo является функцией конструкторы и B и C являются объектами. Я очень смущен, во-первых, когда вы создаете объект это всегда приходят со свойствами и прото? Это по умолчанию? Кроме того, в терминах функции конструктора для обува. Я правильно сказать, что каждый прото функции по умолчанию в Function.prototype, которая использует Object.prototype для создания объекта? Та часть, которая сбивает с толку для меня Foo.prototype, когда был создан этот прототип? Есть ли функция-конструктор всегда по умолчанию для создания прототипа, который опорный конструктор набора обратно к себе и прото набору объекта?
akotch
1

голосов
2

ответ
53

Просмотры

Можно ли изменить метод определения великокняжеского родительского класса?

Я работал над определенной проблемой и нашел интересную проблему внутри. Поясню на примере (C # код) класс А публика: IA {защищенной абстрактная пустота Append (LoggingEvent loggingEvent) {// Некоторые определения}} общественного класса B: {защищены переопределения недействительного Append (LoggingEvent loggingEvent) {// определение переопределения }} MyClass общественного класса: B {// Здесь я хочу изменить определение метода Append. } Класс A и B имеет определенную библиотеку и у меня нет никакого контроля, чтобы изменить эти классы.
Deepak
1

голосов
0

ответ
29

Просмотры

SQLAlchemy не удалось установить атрибут неотображенного подкласса

У меня есть иерархия наследования, которая выглядит следующим образом: Фрукты Яблоки (имеет тип = «яблоко») Гренисмит (имеет тип = «Гренисмит») Роттен (не имеет отображения определенное) При вызове что-то типа Гнилое и пытается установить атрибут, который имеет столбец в яблоко, я вижу ошибку ниже: Файл "... / SQLAlchemy / ОРМ / attributes.py", линия 228, в __set__ self.impl.set (instance_state (экземпляр), AttributeError: 'NoneType' объект не имеет атрибут «набор» Я не знаю, почему это так, но если бы я сделать карту Гнилой к типу, я больше не вижу этот вопрос. Любая идея, почему я должен отображать класс? Я хотел бы быть способные подклассы классы, чьи родители могут случиться быть отображены в таблицу, но не требуют подкласса иметь какое-либо взаимодействие с базой данных.Смотрите эту суть для примера, который показывает исключение в последней строке.
funseiki
1

голосов
0

ответ
106

Просмотры

Наследование Инверсия в React для обхода всего дерева

Я пытаюсь построить HOC в React, что манипулирует все реагируют элементы, установленные в дереве передается в аргументе. Я использую шаблон инверсии наследования, описанный здесь. Для примера, манипуляция будет состоять в добавлении Foo реквизита с «ПРОШЕЛ !!» в качестве значения для каждого ребенка элемента в компоненте имени Parent. У меня есть следующее дерево, где все Дочерние элементы отображения их имя, своих детей, если те, и значение Foo реквизита: Const Child = ({Foo}) => Ребенок {Foo} Const NestedChild = ({Foo}) => NestedChild { Foo} Const ChildWithNested1 = ({Foo, дети}) => ChildWithNested1 {Foo} {} Const дети ChildWithNested2 = ({Foo}) => ChildWithNested2 {Foo} класс родитель расширяет компонент {визуализации () {возвращение (); }} Цель состоит в том, чтобы передать Foo опору для каждого ребенка элементы, даже вложенные из них. Я строю простой HOC, пересекающие дерево рекурсивно: Const HOC = (компонент) => {обратный класс WrappedComponent расширяющий компонент {traverseTree = (дерево) => {если (tree.props.children) {сопз newChildren = React.Children. карта (tree.props.children (пункт) => this.traverseTree (пункт)) Const newTree = React.cloneElement (дерево, {Foo: "ПРОШЕЛ !!}, newChildren) вернуться newTree} еще если (React.isValidElement (дерево)) {Const newProps = Object.assign ({}, tree.props, {Foo: 'PASSED !!'}) возвращают React.cloneElement (дерево, newProps, tree.props.children)} еще {возвращение дерева} } визуализации () {вернуться this.traverseTree (супер. рендеринга ())}}} экспорта по умолчанию HOC (Parent); И я получаю этот результат в браузере: Ребенок ПРОШЕЛ !! ChildWithNested1 ПРОШЕЛ !! NestedChild ПРОШЕЛ !! ChildWithNested2 ПРОШЕЛ !! NestedChild Так HOC работает, как и ожидалось, все дочерние элементы получить Foo опору, за исключением второго NestedChild элемента, который непосредственно вызван в ChildWithNested2, поэтому не включены в props.children объекта, и, следовательно, не достигается с помощью функции traverseTree в HOC. Так что мой вопрос: Можно ли сделать HOC, который достигает каждый реагирует элемент, чтобы получить этот результат: ребенок ПРОШЕЛ !! ChildWithNested1 ПРОШЕЛ !! NestedChild ПРОШЕЛ !! ChildWithNested2 ПРОШЕЛ !! NestedChild ПРОШЕЛ !! Во-вторых, есть способ, чтобы написать функцию, которая изменять только пользователи, названные элементы реагируют (не HTML-теги элементы, такие как DIV)? И я получаю этот результат в браузере: Ребенок ПРОШЕЛ !! ChildWithNested1 ПРОШЕЛ !! NestedChild ПРОШЕЛ !! ChildWithNested2 ПРОШЕЛ !! NestedChild Так HOC работает, как и ожидалось, все дочерние элементы получить Foo опору, за исключением второго NestedChild элемента, который непосредственно вызван в ChildWithNested2, поэтому не включены в props.children объекта, и, следовательно, не достигается с помощью функции traverseTree в HOC. Так что мой вопрос: Можно ли сделать HOC, который достигает каждый реагирует элемент, чтобы получить этот результат: ребенок ПРОШЕЛ !! ChildWithNested1 ПРОШЕЛ !! NestedChild ПРОШЕЛ !! ChildWithNested2 ПРОШЕЛ !! NestedChild ПРОШЕЛ !! Во-вторых, есть способ, чтобы написать функцию, которая изменять только пользователи, названные элементы реагируют (не HTML-теги элементы, такие как DIV)? И я получаю этот результат в браузере: Ребенок ПРОШЕЛ !! ChildWithNested1 ПРОШЕЛ !! NestedChild ПРОШЕЛ !! ChildWithNested2 ПРОШЕЛ !! NestedChild Так HOC работает, как и ожидалось, все дочерние элементы получить Foo опору, за исключением второго NestedChild элемента, который непосредственно вызван в ChildWithNested2, поэтому не включены в props.children объекта, и, следовательно, не достигается с помощью функции traverseTree в HOC. Так что мой вопрос: Можно ли сделать HOC, который достигает каждый реагирует элемент, чтобы получить этот результат: ребенок ПРОШЕЛ !! ChildWithNested1 ПРОШЕЛ !! NestedChild ПРОШЕЛ !! ChildWithNested2 ПРОШЕЛ !! NestedChild ПРОШЕЛ !! Во-вторых, есть способ, чтобы написать функцию, которая изменять только пользователи, названные элементы реагируют (не HTML-теги элементы, такие как DIV)? ChildWithNested2 ПРОШЕЛ !! NestedChild Так HOC работает, как и ожидалось, все дочерние элементы получить Foo опору, за исключением второго NestedChild элемента, который непосредственно вызван в ChildWithNested2, поэтому не включены в props.children объекта, и, следовательно, не достигается с помощью функции traverseTree в HOC. Так что мой вопрос: Можно ли сделать HOC, который достигает каждый реагирует элемент, чтобы получить этот результат: ребенок ПРОШЕЛ !! ChildWithNested1 ПРОШЕЛ !! NestedChild ПРОШЕЛ !! ChildWithNested2 ПРОШЕЛ !! NestedChild ПРОШЕЛ !! Во-вторых, есть способ, чтобы написать функцию, которая изменять только пользователи, названные элементы реагируют (не HTML-теги элементы, такие как DIV)? ChildWithNested2 ПРОШЕЛ !! NestedChild Так HOC работает, как и ожидалось, все дочерние элементы получить Foo опору, за исключением второго NestedChild элемента, который непосредственно вызван в ChildWithNested2, поэтому не включены в props.children объекта, и, следовательно, не достигается с помощью функции traverseTree в HOC. Так что мой вопрос: Можно ли сделать HOC, который достигает каждый реагирует элемент, чтобы получить этот результат: ребенок ПРОШЕЛ !! ChildWithNested1 ПРОШЕЛ !! NestedChild ПРОШЕЛ !! ChildWithNested2 ПРОШЕЛ !! NestedChild ПРОШЕЛ !! Во-вторых, есть способ, чтобы написать функцию, которая изменять только пользователи, названные элементы реагируют (не HTML-теги элементы, такие как DIV)? поэтому не включены в объект props.children, и, следовательно, не достигается с помощью функции traverseTree в HOC. Так что мой вопрос: Можно ли сделать HOC, который достигает каждый реагирует элемент, чтобы получить этот результат: ребенок ПРОШЕЛ !! ChildWithNested1 ПРОШЕЛ !! NestedChild ПРОШЕЛ !! ChildWithNested2 ПРОШЕЛ !! NestedChild ПРОШЕЛ !! Во-вторых, есть способ, чтобы написать функцию, которая изменять только пользователи, названные элементы реагируют (не HTML-теги элементы, такие как DIV)? поэтому не включены в объект props.children, и, следовательно, не достигается с помощью функции traverseTree в HOC. Так что мой вопрос: Можно ли сделать HOC, который достигает каждый реагирует элемент, чтобы получить этот результат: ребенок ПРОШЕЛ !! ChildWithNested1 ПРОШЕЛ !! NestedChild ПРОШЕЛ !! ChildWithNested2 ПРОШЕЛ !! NestedChild ПРОШЕЛ !! Во-вторых, есть способ, чтобы написать функцию, которая изменять только пользователи, названные элементы реагируют (не HTML-теги элементы, такие как DIV)?
onino-js
1

голосов
1

ответ
36

Просмотры

В VS Есть ли способ изменить все производные классы аргументов методы одновременно?

В основном название. Но я приведу пример, в случае, если я не сделал слово правильно. общественного абстрактного класса А {общественный абстрактный метод недействительным (Foo Foo); } Класс В общественном: а {общественного переопределения Методы недействительных (Foo Foo) {бросить новый System.NotImplementedException (); }} Класса С общественности: А {общественного переопределение Метод недействительным (Foo Foo) {бросить новый System.NotImplementedException (); }} Я хочу изменить (Foo Foo) в каждом классе, связанные с «класса А» все сразу. Я мог бы сделать поиск и замену, но если я использую это имя метода в другом месте он рискует повреждающее другой код. Я планирую на том, возможно, сотни классов, производных от абстрактного, так что я хотел бы знать, что я могу изменить вещи вниз линии.
craftomega
1

голосов
1

ответ
210

Просмотры

Kotlin singleton in a subclass

Я пишу рамки, в которых у меня есть трудности, чтобы написать общий одноэлементный класс, который нужен быть специализирован пользователем. Я хотел бы использовать возможность написать что-то вроде: класса CustomClass защищенного конструктора (): BasicClass () с каркасной возможностью написать: BasicClass.instance возвращающей BasicClass одиночку и пользователь в состоянии написать: CustomClass.instance возвращая тот же экземпляр, но как одиночки, например CustomClass. У меня есть две возможности в виду, Case # 1: Singleton управляется пользователем класс класса CustomClass частного конструктора (): BasicClass () {частный объект Holder {вал INSTANCE = CustomClass ()} объект компаньоном {вал экземпляра: CustomClass по ленивым { Holder.INSTANCE}}} Но я не имею никакого отношения экземпляра в сторону BasicClass, и пользователю необходимо реализовать Синглтон каждый раз. Дело № 2: Singleton управляется рамки, которые я не в состоянии написать правильно Заранее спасибо за вашу помощь.
AnthonyCFE
1

голосов
0

ответ
69

Просмотры

Конструктор Функция против Object.create - В чем разница и приложения?

Приходя на Java, я пытаюсь правильно понять Javascript ООП. Я читал об этом, но не интуитивно понимал разницу и применение двух методов создания объектов и наследования. Object.create Как я понимаю: Object.create () устанавливает прототип данного объекта к этому объекту, перешедшему в .create ()? Так, к примеру. Const Кошка = {INIT: функция (звук) {this.sound = звук; это вернуть}, makeSound: функция () {console.log (this.sound); }} Вар знак = Object.create (кат); mark.init ( 'meoow!'); mark.makeSound (); console.log (знак); Здесь прототип объекта Марка которую ссылается на объект Cat? Правильно? Если это верно Вопрос 1: Почему не JS просто установить объект родительского класса для подкласса (вместо его прототипа)? Вопрос 2: Что именно является использование того объекта-прототипа, связанный с каждым объектом? Не было наследство более комфортно, если бы мы только имели один объект, ссылающийся другой? Вопрос 3: Я прочитал это не хорошая практика, чтобы установить прототип поля объекта? Мы должны работать только с реальными полями объектов и методов, это правда, и почему? т.е. Cat.prototype.age = 10; новый Object () В следующем коде ... функция кошки () {this.sound = 'wooof!'; } Вар кобылка = новая кошка (); console.log (filly.sound); console.log (кобыла); Вопрос 4: реальный объект кобылки наследует свойство кошки (или прототип объект кобылка в)? Это кажется очевидным, я не понимаю, как, когда и почему объекты прототипов используются в JavaScript, возможно? Пожалуйста помоги! т наследство будет более комфортно, если мы только что один объект, ссылающейся другое? Вопрос 3: Я прочитал это не хорошая практика, чтобы установить прототип поля объекта? Мы должны работать только с реальными полями объектов и методов, это правда, и почему? т.е. Cat.prototype.age = 10; новый Object () В следующем коде ... функция кошки () {this.sound = 'wooof!'; } Вар кобылка = новая кошка (); console.log (filly.sound); console.log (кобыла); Вопрос 4: реальный объект кобылки наследует свойство кошки (или прототип объект кобылка в)? Это кажется очевидным, я не понимаю, как, когда и почему объекты прототипов используются в JavaScript, возможно? Пожалуйста помоги! т наследство будет более комфортно, если мы только что один объект, ссылающейся другое? Вопрос 3: Я прочитал это не хорошая практика, чтобы установить прототип поля объекта? Мы должны работать только с реальными полями объектов и методов, это правда, и почему? т.е. Cat.prototype.age = 10; новый Object () В следующем коде ... функция кошки () {this.sound = 'wooof!'; } Вар кобылка = новая кошка (); console.log (filly.sound); console.log (кобыла); Вопрос 4: реальный объект кобылки наследует свойство кошки (или прототип объект кобылка в)? Это кажется очевидным, я не понимаю, как, когда и почему объекты прототипов используются в JavaScript, возможно? Пожалуйста помоги! S не хорошая практика, чтобы установить прототип поля объекта? Мы должны работать только с реальными полями объектов и методов, это правда, и почему? т.е. Cat.prototype.age = 10; новый Object () В следующем коде ... функция кошки () {this.sound = 'wooof!'; } Вар кобылка = новая кошка (); console.log (filly.sound); console.log (кобыла); Вопрос 4: реальный объект кобылки наследует свойство кошки (или прототип объект кобылка в)? Это кажется очевидным, я не понимаю, как, когда и почему объекты прототипов используются в JavaScript, возможно? Пожалуйста помоги! S не хорошая практика, чтобы установить прототип поля объекта? Мы должны работать только с реальными полями объектов и методов, это правда, и почему? т.е. Cat.prototype.age = 10; новый Object () В следующем коде ... функция кошки () {this.sound = 'wooof!'; } Вар кобылка = новая кошка (); console.log (filly.sound); console.log (кобыла); Вопрос 4: реальный объект кобылки наследует свойство кошки (или прототип объект кобылка в)? Это кажется очевидным, я не понимаю, как, когда и почему объекты прототипов используются в JavaScript, возможно? Пожалуйста помоги! S реальный объект наследует свойство кошки (или прототип объекта кобылка в)? Это кажется очевидным, я не понимаю, как, когда и почему объекты прототипов используются в JavaScript, возможно? Пожалуйста помоги! S реальный объект наследует свойство кошки (или прототип объекта кобылка в)? Это кажется очевидным, я не понимаю, как, когда и почему объекты прототипов используются в JavaScript, возможно? Пожалуйста помоги!
Shaz
1

голосов
0

ответ
62

Просмотры

Как избежать дубликатов, используя наследование или полиморфизм, лучший способ реорганизовать

У меня есть класс Операция класса Операция {виртуальная пустота выполнения (операции, OperationCallback) = 0} С помощью обратного вызова OperationCallback = станд :: функции; и как 30 различных классов, отходящие от него InsertOperation: общественный Операция EditOperation: общественные работы Каждая из них реализуется выполнение и устанавливает обратный вызов по окончании операции я выполнить операцию с использованием пустот ExecuteOperation (операция Операция, OperationCallback operationCallback) {работы-> выполнить (операция, operationCallback); } Я хочу, чтобы новый обратный вызов под названием Результат, который включает в себя ошибку и Result Id класса {Error ошибка INT ID; Ошибка GetError () Int GetId ()} Новый обратный вызов будет использоваться только в некоторых операциях и не все из них, но я хотел бы повторно использовать существующий код, так что я не должен дублировать много способов, чтобы использовать новую функцию обратного вызова Во избежание дублирования, как с помощью OperationWithResultCallback = станд :: функция; недействительным ExecuteOperationWithResult (операция Операция, OperationCallback operationCallback) {работы-> executeWithResult (операция, operationCallback); } В операции Classs виртуальной ничтожной executeWithResult (операция, OperationWithResultCallback) = 0 Там может быть вариант для результата, чтобы продлить ошибки, но тогда мне придется изменить, чтобы использовать ссылку & Error везде Кроме того, я, вероятно, может добавить идентификатор к классу ошибок себя, но Я хочу, чтобы избежать этого.
Kenenisa Bekele
1

голосов
0

ответ
58

Просмотры

Inheritace общих этапов испытаний от базового класса

При написании тестовых примеров для тестовых сценариев конца в конец с использованием Java, селен, Java; мы можем сохранить общие шаги в метод базового класса и конкретное дополнение, редактировать шаги в конкретном классе. общественный абстрактный класс XXXXBaseTest распространяется SeleniumTest {@Test общественного недействительный validateCalendarUi () бросает IOException {** ExpCalendar expCalendar = openExpCalendar (); ** Строка calenderAvailable = expCalendar.getHeaderViewText (); Assert.assertEquals (calenderAvailable, "Просмотр календаря", "Ошибка: Календарь не доступен"); }} Затем метод открыл календарь () переопределяется в каждом конкретном классе с конкретными шагами. класс XXXXXViewExpirationCalendarTest общественности распространяется RefDataExpirationCalendarTest {@Override защищен ExpCalendar openExpCalendar () {// Здесь пишут конкретные методы}} Является ли это надлежащий подход для испытания сценариев? Можем ли мы использовать понятие наследования, чтобы писать тесты таким образом?
1

голосов
1

ответ
93

Просмотры

Сумасшедшие поведение на вызов метода: метод вызывает A (), но вызывает свойство Z

У меня есть на самом деле с ума поведение внутри моего кода: метод, который вызывает A () вызывает Z (). У меня есть интерфейс IConverterStoreBase, который обеспечивает метод: ConverterBase OrderConverter (тип ConverterType): интерфейс IConverterStoreBase общественного {ConverterBase OrderConverter (тип QDTUtil.ConverterType); } Базовый класс: ConverterStoreBase, который наследует от IConverterStorBase: частный ConverterBase OrderConverter (ConverterType TypeOfConverter) {ConverterBase Theconverter = MakeConverter (TypeOfConverter); theConverter.MakeConverter (); вернуться Theconverter; } ConverterBase IConverterStoreBase.OrderConverter (тип ConverterType) {вернуть OrderConverter (тип); } Класс вызова: DrawingProject, который называет OrderConverter: частный статический ConverterBase GetConverter (IConverterStoreBase CSB) {вернуться DataProvider.ConverterType!. Равно (ConverterType.NotSupported)? CSB.OrderConverter (DataProvider.ConverterType): нуль; } DataProvider является центральным классом, который содержит различные структуры и переменные данных, которые необходимы во многих и различных частях коды. Теперь к задаче (который первым появляется с Visual Studio 2017): Во время отладки, заливаю данных из CSV, который обрабатывается программой. Когда все данные обрабатываются, программа готова, чтобы получить преобразователь готов на основе этих данных. Это этап, на котором GetConverter называется. Во-первых GetConverter проверяет, является ли проекты ConverterType поддерживается или нет. Если это не так, просто возвращает нуль, в противном случае он должен вызвать OrderConverter в IConverterStoreBase, но он вызывает свойство из DataProvider, который не имеет ничего общего с этим шагом, он вызывает: открытый статический StatusControlBase StatusControlBase {получить; задавать; } = NULL; который является экземпляром управления в строке состояния. CodeMap и все ссылки показывают правильный путь вызова. Может быть, что-то нарушается при переходе от vs2013 в vs2017. Любые предложения, как это исправить? редактировать 1: Имя Язык> QDTUtil.dll (группа =, строковое значение "Преобразователь" String = "Топология") QDTUtil.ProjectData.GetValue Line 51 C # Символы загружены. Converter.dll! Converter.GL150.FactoryGL150N.AddOverview.get () Неизвестный код непользовательского. Пропущенные загрузки символов. Converter.dll! Converter.GL150.ConverterGL150N.MakeConverter () Неизвестный код непользовательского. Пропущенные загрузки символов. Converter.dll! Converter.ConverterStoreBase.Converter.IConverterStoreBase.OrderConverter (тип QDTUtil.ConverterType) Неизвестный код непользовательские. Пропущенные загрузки символов. QDTFunction.dll! QDTFunction.DrawingProject.GetConverter (конвертер. IConverterStoreBase CSB = {Converter.GL150.StoreGL150}) Строка 120 C # Символы загружены. QDTFunction.dll! QDTFunction.DrawingProject.CreateConverter () строки 68 C # Символы загружены.
Mirko
1

голосов
1

ответ
40

Просмотры

Инициализация базовой части производного STRUCT / Неожиданные упаковки полученных полей структуры для выравнивания зазора базовой структуры

Было неожиданно обнаружено, что лязг ++ 7 позволяет себе плотно упаковать поля производного структуры (структура «B» с полем «B :: u16_gap» в приведенном ниже примере) в зазоре выравнивания базовой структуры (структура «А «). Но функция «zero_init» в примере ожидает, что это вход, чтобы быть «А» -объект с неиспользуемым зазором выравнивания, поэтому он может быть перезаписан «тетср». Эта функция «zero_init», конечно же, перезаписывает любое значение «B :: u16_gap» -поля, когда он применяется к «B» -объект. // сборник: лязг ++ - 7 -std = C ++ 17 test.cpp #include #include #include структура A {станд :: uint32_t u32 = 0; станд :: uint16_t u16 = 0; }; недействительный zero_init (А & а) {статические constexpr Нулевого = {}; станд :: тетср (& а, & нуль, SizeOf (А)); }; структура B: обществен {станд :: uint16_t u16_gap = 0; }; static_assert (SizeOf (А) == 8); static_assert (SizeOf (В) == 8); // лязг ++ - 7 упаковок дополнительное поле "Б :: u16_gap" в зазор выравнивания А (для г ++ - 7 это не так) INT основных () {B B; & А = Ь; b.u16_gap = 123; zero_init (а); станд :: соиЬ
Dr. Zoidberg
1

голосов
1

ответ
90

Просмотры

Does contravariance and covariance means using also the same type?

Я совершенно запутался. Я наткнулся на правилах подписи (именуемых также B.Liskov в своей работе), что состояние: контравариации аргументов. m1 и m2 имеют одинаковое число аргументов. Если список типов аргументов в m1 является, и что т2 есть Ь, то ∀i. аи <би // это означает, что является подтипом б. Из другого учебного материала: Для типа функции DY → CY быть подтип (т.е. замещаемого для DX) → CX, мы должны быть ковариантным типа результата, но контравариантный в типе аргумента! Так это значит, что я никогда не надлежащего подтипы, если я использую только те же типы аргументов и возвращаемых типов? Я не понимаю, как при использовании того же типа считается также, то есть, когда я использую один и тот же тип для обоих аргументов метода родительского и дочернего класса, это контравариантен? Другими словами, C # не позволяет аргументы контравариации, это значит мой код никогда не LSP соответствует? Как я прочитал, что ЛСП требует, чтобы аргументы должны быть контравариантен .. класс Person {} класс Employee: Person {} класс PersonRegister {GetJobTitle (Служащий е) {вернуться e.JobTitle;}} класс DeriverRegister: PersonRegister {GetJobTitle (Person р) / / контрвариантность, используя меньше производного типа, не может быть сделано в C #} Как это может работать, если, например, менее производный тип не требовали поля, в данном примере JobTitle? Это свойство Работника, но обязательно в человеке. не может быть сделано в C #} Как это может работать, если, например, менее производный тип не требовали поля, в данном примере JobTitle? Это свойство Работника, но обязательно в человеке. не может быть сделано в C #} Как это может работать, если, например, менее производный тип не требовали поля, в данном примере JobTitle? Это свойство Работника, но обязательно в человеке.
John V
1

голосов
1

ответ
118

Просмотры

Ошибка компилятора: свободнее бросок спецификатор для destuctor

#include структура ICantChange {виртуальный ~ ICantChange () {}}; Struct ClassThatThrows {виртуального ~ ClassThatThrows () noexcept (ложь) {бросить 44; }}; структура теста: ICantChange {~ Test () {} ClassThatThrows экземпляр; }; Основной () {попробуйте {Test OBJ; } Задвижка (интермедиат исключения) {станд :: соиЬ
Ashot
1

голосов
0

ответ
35

Просмотры

Доктрина наследования, базовый класс и два подтипа

Мне нужно обрабатывать 3 объектов, которые охватывают и ту же таблицу 'пользователей: пользователь: охватывает класс пользователей и участвуют в некоторых службах аутентификации / проверке. Driver: удлиняет пользователя, и это связано с некоторыми другими таблицами. Кроме того, участие в различных службах. Пассажир: удлиняет пользователь, и это связанно с другими таблицами. Кроме того, участие в различных службах. Все записи на таблице пользователей являются пользователями. Эти записи с is_driver = 0 пассажиры, и те, с is_driver = 1 являются драйверами. Я знаю, что могу сделать отображенный супер класс для таблицы пользователей и дискриминатор будет is_driver. Так Пассажирское предприятие и водитель предприятие будет расширить это. Проблема, которую я вижу, что я не могу создать объект пользователя, которые расширяют этот сопоставляются супер класс, потому что он не имеет дискриминатора, любая запись пользователь. Существует существующая база данных и я м миграции проекта, есть столбец is_driver, который различает, если пользователь является водитель или пассажир (крошечные INT 0 или 1). Теперь я хотел бы иметь 3 лиц. Пользователь: общий (любая строка) Driver: эти строки с is_driver = 1 Пассажир: эти строки с is_driver = 0 В идеале все будет приложена в ОРМ в некотором роде к таблице пользователей, а также водитель и пассажир нужно также быть связаны с различными лица отдельно.
vivoconunxino
1

голосов
0

ответ
72

Просмотры

dynamic_cast с виртуальным наследованием вызывает нарушение прав доступа [дублированный]

Этот вопрос уже есть ответ здесь: Почему я не могу dynamic_cast «боком» при многократном наследовании? 4 ответа dynamic_cast из «этого» внутри конструктора 5 ответов у меня есть конкретная иерархия классов, которая происходит сбой во время выполнения (Visual Studio 2017) структура А {}. структура B {Auto F () {dynamic_cast (это); // триггеры: Нарушение прав доступа} виртуального ~ B () = по умолчанию; }; структура C: виртуальный B, A // удалить "виртуальные", чтобы исправить {C () {F (); } Int А; // удалить исправить}; структура D: виртуальный С {}; // удалить "виртуальные" исправить Int основной () {D D; } Вопрос: является ли эта проблема кода или, скорее, ошибка компилятора? Я попробовал много вариантов, но ни один из них не удовлетворяет, так как этот код выглядит правильно для меня.
Agent Kat
1

голосов
0

ответ
56

Просмотры

Как я могу добавить несколько супругов моей родословной с использованием пакета Kinship2?

Я пытаюсь построить довольно сложные родословные с помощью пакета Kinship2 R. Большинство семей показывает высокий уровень кровных и нескольких супругов, как я могу показать, что на моей родословной. Это мой текущий сюжет ## ДФ данных
Marierose M. Mina
1

голосов
2

ответ
47

Просмотры

Создание класса, который наследует от другого класса?

Я пытаюсь научиться C ++ из Juce и создания аудио-синтезатор. У меня есть синтезатор, который может выводить звук из класса генератора (MaxiOsc) Короче говоря, как это: класс SynthVoice: общественный SynthesiserVoice {частное: MaxiOsc testOsc; двойная частота = 0; // частота затем изменяется другой функцией новыми нотами с клавиатуры конечно ... публика: двойной oscOutput () {вернуться testOsc.sinewave (частота); } Недействительного renderNextBlock (AudioBuffer & OUTPUTBUFFER, Int startSample, Int NumSamples) {переопределения для (INT образец = 0; образца <NumSamples; ++) {образец для канала (INT = 0; канал <outputBuffer.getNumChannels (); ++ канал) {outputBuffer.addSample (канал, startSample, oscOutput () // ОСНОВНОЙ ВЫВОД ЗДЕСЬ} ++ startSample; }} Я пытаюсь создать новый класс ModalUnit, который наследуется от MaxiOsc и создает объект MaxiOsc внутри него. Идея заключается в том, чтобы использовать ModalUnit вместо MaxiOsc в коде синтезатора выше и добавить дополнительную обработку кода класса ModalUnit в конце концов. Вот что у меня есть для класса ModalUnit: класс ModalUnit: общественный MaxiOsc {общественности: ModalUnit () {} двойной getOutput (двойная частота) {выход = testOsc.sinewave (частота); вернуть выход; } Частные: MaxiOsc testOsc; двойной выход = 0.0; }; Но когда я пытаюсь осуществить это в коде синтезатора он не будет выводить любой аудио: класс SynthVoice: общественный SynthesiserVoice {частное: ModalUnit testModalUnit; двойная частота = 0; // частота затем изменяется другой функцией новыми нотами с клавиатуры конечно ... публика: двойной modalUnitOutput () {вернуться testModalUnit.getOutput (частота); } Недействительного renderNextBlock (AudioBuffer & OUTPUTBUFFER, Int startSample, Int NumSamples) {переопределения для (INT образец = 0; образца <NumSamples; ++) {образец для канала (INT = 0; канал <outputBuffer.getNumChannels (); ++ канал) {outputBuffer.addSample (канал, startSample, modalUnitOutput () // ОСНОВНОЙ ВЫВОД ЗДЕСЬ} ++ startSample;}}? Что я делаю неправильно в этом новом творении классе я в основном просто хочу класс ModalUnit создать MaxiOsc в нем, а затем выход из этого начать. Как я могу это сделать или это исправить? Спасибо.
Mike
1

голосов
1

ответ
19

Просмотры

Python: nosetests по проекту, содержащий BASECLASSES

У меня есть пакет, который я создал, который содержит базовый класс, из которого будущие проекты будут наследовать. Я пытаюсь автоматизировать тестирование, и обратился к nosetests. Я новичок в Python, так что извинения, если мой вопрос лежит нечто тривиальное / рудиментарным. Этот проект использует популярные Python конечных переходов пакетов машина, из которой мой базовый класс наследует государство (как это видно в моем states.py). После запуска $ nosetests внутри base_tester /, получаю 3 повторили ошибки (только 1 вставили для краткости): E.EE. ================================================== ==================== ОШИБКА: Ошибка: TypeError (__init __ () отсутствует 1 необходимый позиционную аргумент: 'имя') ----------- -------------------------------------------------- --------- Traceback (самый последний вызов последнего): Файл «/home/user/.pyenv/versions/3.7.1/lib/python3. и реализовать наследующий класс, он работает, как задумано. Я слева полагать, что существует что-то не так с тем, что я делаю в test.py, но не могу понять, что. Спасибо! Структура проекта: base_tester / ├── base_tester / │ ├── __init__.py │ └── states.py ├── setup.py └── тест / ├── __init__.py └── test.py states.py : от переходов импорта класса состояния класса # Родителя TestParent (State): Защита __init __ (самоповреждения, * арг, ** kwargs): супер () .__ инициализации __ (* арг, ** kwargs) # Для того, чтобы быть реализовано путем наследования классов Защиты run_test ( самостоятельно): поднять NotImplementedError () base_tester / init.py: от base_tester.states импорта * тест / test.py: импорт UnitTest из класса base_tester импорта TestParent Test1 (TestParent): Защита __init __ (самоповреждения, * арг, ** kwargs): супер () .__ Инициализационные __ (* арг,
laughlinb
1

голосов
0

ответ
55

Просмотры

Можно ли с C ++, чтобы организовать смещение базового класса по отношению к его производному классу?

Рассмотрим следующий «черный ящик», шаблон класса BlackBox; Какой должна иметь следующую особенность: класс SomeClass; // Этот класс имеет виртуальный деструктор // и конструктор по умолчанию. constexpr станд :: size_t смещение = alignof (SomeClass); авто бб = новый BlackBox; SomeClass * PTR = бб; утверждают ((символ *) PTR - (символ *) == бб смещение); // OK удалить PTR (!); // OK - Уничтожает и удаления Bb правильно. Здесь смещение всегда неотрицательное кратно alignof (SomeClass), но ради этого вопроса вы можете предположить, что это именно один раз alignof (SomeClass). Кроме того, вы можете считать, что alignof (SomeClass)
Carlo Wood
1

голосов
0

ответ
20

Просмотры

Расширение нескольких унаследованных методов с контекстом в Python

Предпосылка: - У меня есть родительский класс с> 10 методов и класс ребенка, который нуждается в реализации этих 10 методов. - Класс Ребенок должен добавить управление квази-контекст для всех этих методов. Я говорю управление квази-контекст, потому что я действительно не нужен файловый объект для выполнения действий, но мне нужно, чтобы запустить 2 линии установки / демонтаж для каждого метода. - Есть и другие дочерние классы, где родительский метод не утратит, таким образом, я не хочу никакого управления контекстом в классе Parent. Пример код, что я в настоящее время, что я знаю, что может быть лучше: класс Parent (объект): Защита Foo (я, arg1 = «по умолчанию», АГРН): печать ( «Действие, что может произойти сбой: {} {}». формат (arg1, АГРН)) класс для детей (родитель): Защита бара (самость, arg1, АГРН): setup_method () супер (ребенок, самостоятельно) .bar (arg1, АГРН) teardown_method () Защита teardown_method () печать ( «Это просто новый метод в классе Child») печать ( «Эти две линий предотвращения проблем реального мира») ПСЕВДОКОД того, что я хочу (или что-то вроде этого): импорт окутано, инспектировать @ wrapt.decorator четкости обертки (обернутый, экземпляр Args, kwargs): Защита add_context (* арг, ** kwargs): с context_man: parent_method_of_same_name = get_parent_method (экземпляр) # использовать инспектировать модуль? calling_class = inspect.getmro (обернуты) # использовать проверить модуль? супер (calling_class, самостоятельно) .parent_method_of_same_name (* арг, ** kwargs) # использование себя здесь? Класс context_man (объект): Защита __enter __ (Я): печать ( "Эти две линий предотвращения проблем реального мира") Защита __exit __ (Я): печать ( «Эти две линий предотвращения проблем реального мира») возвращение add_context (* арг, ** kwargs) класс Parent (объект): Защита Foo (сам, arg1 = «по умолчанию», АГРН): печать ( "Действие, что может произойти сбой : {} {}»формат (arg1, АГРН)) класс для детей (Parent). @wrapper защиту бар (самость, арг, kwargs): передать Это было бы очень advantegeous при работе со всеми> 10 методов, так как я не придется повторять заявления пытаются прилов и я не должен повторять вызовы супер (). Однако, очевидно, есть много проблем, с выше фрагменте кода: Я не совсем уверен, как я избежать необходимости выписывать аргументы для каждого метода, сохраняя все сигнатуры методов (методы родительского класса различаются по количеству аргументов, некоторые из них argumen по умолчанию ц, которые я хотел бы сохранить без повторного ввода и т.д.
matsciguy
1

голосов
1

ответ
25

Просмотры

Условный Доступ классов на основе параметра конструктора

от folder.test.test1 импорта Test1 из folder.test.test2 импорта Test2 из other_folder импортных TEST3 класса Sample (Test1, Test2, TEST3): Защита __init __ (самость, версия): Test3 .__ __ INIT (Я), если версия == «Gen1 «: само .__ class__ = Test1 Test1 .__ INIT __ () Элиф версия == 'gen2': само .__ class__ = Test2 Test2 .__ INIT __ () защиту Логин (Я, ф): пройти, если __name__ == '__main__': О.Б. = Sample (версия = «Gen2») ob.login ( «192.168.1.100») я получаю эту ошибку: AttributeError: объект «test2» не имеет атрибута «войти в систему» ​​не в состоянии получить доступ к методу Логин () класса Sample, хотя у меня есть проба класса объекта. Я хочу, чтобы объект, чтобы иметь доступ к Sample, test2 и TEST3 методов (не Test1, так как версия «gen2» ). В случае, если версия «Gen1», проба объект должен быть имеющий доступ только образец, test1 и TEST3 методов и не Test2.
Safdar Mirza
1

голосов
0

ответ
41

Просмотры

Использование композиции или виртуального наследования в таких случаях, как Компонентов GameObject

Поэтому разработка игр с использованием объектно-ориентированной парадигмой в C ++ обычно включает в себя идею геймобжектов и их компонентов. Теперь первую очередь, GameObject бы список компонентов, как в следующем: класс геймобжекты {список m_components; Компонент * GetComponent (компонент) {}} Теперь, конечно, есть много других способов реализации на GameObject в лучшем и более эффективном способе, но это не имеет значение, потому что мое внимание будет на компонентах. То, как GameObjects состоит из компонентов является классическим примером композиции через архитектуру на основе компонентов, как каждый компонент представляет собой поведение для GameObject. Сами компоненты могут состоять из нескольких «особенностей» или поведения, которые могут быть необходимы. Например, мы могли бы иметь компонент, который опирается на несколько других классов с поведением, такие как clickables, перетаскивание и других классов. Принимая во внимание, что каждый суб компонент действительно есть все необходимые для функции, они не зависят от вызова их родительского конструктора класса, и что конкретные классы будут реализовывать виртуальный метод от одного из родительских классов для выполнения действий в результате поведения происходит. Я считаю, что это с помощью виртуального наследования в этом случае кажется, лучшим решением, чем иметь другой слой композиции. Я бы в конечном итоге с помощью следующего: класс компонента {} класса Clickable: виртуальный компонент {виртуальный OnClick (); } Класс перетаскиваемым: виртуальный компонент {виртуальный OnDrop (); } Каждый класс делает то, что ему нужно, не мешая базовый класс. Каждый бы добавить функциональность, которая может наследоваться. все конкретные классы нужно сделать, это переопределить при условии виртуальной. Они не могут быть чисто интерфейсов, потому что каждый класс должен сделать это собственный материал. Конкретный класс будет выглядеть следующим образом: класс ConcreteComponent: общественный компонент, общественные кликабельны, общественные Dragable {} Проблемы, которые требуют решений: 1 static_casting отключен, таким образом, я бы, опираясь на dynamic_cast, и из-за их дорогостоящую природу, я будет вынужден вызывать только эти при создании экземпляра компонента и добавить указатели как переменные, если любой крест поведенческий материал необходим. Могу ли я действительно ограничивается этим? бы прямое крепление к базовому компоненту по крайней мере облегчить часть проблемы, позволяя статическое литье в любой бетон, даже если у них есть родительские классы, виртуальные базовые классы? 2 Speed-мудрое, насколько хуже будет зависимость от виртуальных классов быть чем прямая реализация вперед наследования. 3 есть фактическая жизнеспособная композиция на основе реализация такого рода проблемы вместо этого? не сильная зависимость от состава плохого кода запаха, особенно когда она используется на различных уровнях?
Saleh
1

голосов
1

ответ
36

Просмотры

наследование контроллера и выбор, какой контроллер имеет распространенность

У меня есть baseproject и различные проекты Унаследовав. Базовый проект имеет контроллеры, я, возможно, захотите иногда наследовать и переопределить (частично). Базовый проект: публичный виртуальный индекс ActionResult (строка фильтр = «», внутр страница = 1) проект Sub: общественный переопределение Index ActionResult (строка фильтр = «», внутр страница = 1) Теперь я изменил routeConfig, поэтому маршрутизация отображаются логика от правильного пространства имен. context.MapRoute ( "Routename", "AreaName / {контроллер} / {действие} / {ID}", новый контроллер {= "ControllerName", действие = "Индекс", ID = UrlParameter.Optional}, новая строка [] { "ProjectName.Areas.AreaName.SpecificControllers"}); Тем не мение, Я хочу, чтобы новые добавленные маршруты, которые будут взяты из конкретного проекта должны они существуют там. Те, которые не несуществующие должны быть взяты из контроллера базового проекта. (Конкретный контроллер в основном начинается пустым и будет только содержит методы, когда переопределение желательно). Для того, чтобы попытаться реализовать эту функцию, я добавил другой проект для маршрутизации здесь: context.MapRoute ( "Routename", "AreaName / {контроллер} / {действие} / {ID}", новый {контроллер = "ControllerName", действие = "Индекс", ID = UrlParameter.Optional}, новая строка [] { "ProjectName.Areas.AreaName.SpecificControllers", "ProjectName.Areas.AreaName.GenericControllers"}); Однако, это, очевидно, приводит к следующей ошибке: Несколько типов были найдены, что и контроллер с именем «MethodName». Это может произойти, если маршрут, который обслуживает это запрос ( «CRM / {контроллер} / {действие} / {ID}») не определяет пространство имен для поиска контроллера, который соответствует запросу. Если дело обстоит именно так, зарегистрировать этот маршрут, вызывая перегрузку методы «MapRoute», который принимает параметр 'пространств имен. Запрос «MethodName» нашел следующие контроллеры соответствия: ProjectName.Areas.AreaName.SpecificControllers.ControllerName ProjectName.Areas.AreaName.GenericControllers.ControllerName Есть ли способ осуществить это, так что моя маршрутизация всегда будет смотреть на конкретном контроллере первой и только на общем контроллере, если он не может найти метод в конкретном контроллере? MethodName. Это может произойти, если маршрут, который обслуживает это запрос ( «CRM / {контроллер} / {действие} / {ID}») не определяет пространство имен для поиска контроллера, который соответствует запросу. Если дело обстоит именно так, зарегистрировать этот маршрут, вызывая перегрузку методы «MapRoute», который принимает параметр 'пространств имен. Запрос «MethodName» нашел следующие контроллеры соответствия: ProjectName.Areas.AreaName.SpecificControllers.ControllerName ProjectName.Areas.AreaName.GenericControllers.ControllerName Есть ли способ осуществить это, так что моя маршрутизация всегда будет смотреть на конкретном контроллере первой и только на общем контроллере, если он не может найти метод в конкретном контроллере? MethodName. Это может произойти, если маршрут, который обслуживает это запрос ( «CRM / {контроллер} / {действие} / {ID}») не определяет пространство имен для поиска контроллера, который соответствует запросу. Если дело обстоит именно так, зарегистрировать этот маршрут, вызывая перегрузку методы «MapRoute», который принимает параметр 'пространств имен. Запрос «MethodName» нашел следующие контроллеры соответствия: ProjectName.Areas.AreaName.SpecificControllers.ControllerName ProjectName.Areas.AreaName.GenericControllers.ControllerName Есть ли способ осуществить это, так что моя маршрутизация всегда будет смотреть на конкретном контроллере первой и только на общем контроллере, если он не может найти метод в конкретном контроллере? ) Не определяет пространство имен для поиска контроллера, который соответствует запросу. Если дело обстоит именно так, зарегистрировать этот маршрут, вызывая перегрузку методы «MapRoute», который принимает параметр 'пространств имен. Запрос «MethodName» нашел следующие контроллеры соответствия: ProjectName.Areas.AreaName.SpecificControllers.ControllerName ProjectName.Areas.AreaName.GenericControllers.ControllerName Есть ли способ осуществить это, так что моя маршрутизация всегда будет смотреть на конкретном контроллере первой и только на общем контроллере, если он не может найти метод в конкретном контроллере? ) Не определяет пространство имен для поиска контроллера, который соответствует запросу. Если дело обстоит именно так, зарегистрировать этот маршрут, вызывая перегрузку методы «MapRoute», который принимает параметр 'пространств имен. Запрос «MethodName» нашел следующие контроллеры соответствия: ProjectName.Areas.AreaName.SpecificControllers.ControllerName ProjectName.Areas.AreaName.GenericControllers.ControllerName Есть ли способ осуществить это, так что моя маршрутизация всегда будет смотреть на конкретном контроллере первой и только на общем контроллере, если он не может найти метод в конкретном контроллере?
Kai
1

голосов
1

ответ
53

Просмотры

Как решить проблему наследования сетки в C ++

У меня есть следующий набор классов, которые наследуют друг от друга в сетчатом способе. В верхнем уровне, у меня есть абстрактные классы. Оба Abstract_Class_B и Abstract_Class наследуют от Abstract_Class_A. На втором уровне наследования, у меня есть точные реализации этих классов. Impl_Class_A наследует от Abstract_Class_A. Impl_Class_B наследует от обоих Abstract_Class_B и Impl_Class_A. Impl_Class_C наследует от обоих Abstract_Class_C и Impl_Class_A. Когда я компилирую код, приведенный ниже, компилятор компилирует прекрасно, если я не объявить любой класс в коде. Но когда я начинаю объявить указатель на классы на втором уровне, компилятор выдает следующую ошибку: неопределенную ссылку на `VTT для ns3 ::«неопределенную ссылку на `виртуальных таблицы для ns3 :: Impl_Class_B» Impl_Class_B Я использовал виртуальный решать типичную проблему алмазов в наследство, но я до сих пор не в состоянии собрать. Это имеет смысл, что компилятор запутывается из-за этим способом наследования. Но моя система требует такого дизайна для этих классов. Любое решение, чтобы исправить эту проблему? Код: // Top Level (Уровень 1) класс Abstract_Class_A {}; Класс Abstract_Class_B: виртуальная общественная Abstract_Class_A {общественности: тип uint8_t; }; Класс Abstract_Class_C: виртуальная общественная Abstract_Class_A {}; // Второй уровень (Level 2) Класс Impl_Class_A: виртуальная общественная Abstract_Class_A {общественности: двойной угол; }; Класс Impl_Class_B: виртуальная общественная Abstract_Class_B, Impl_Class_A {}; Класс Impl_Class_C: виртуальная общественная Abstract_Class_C, Impl_Class_A {}; недействительный тест () {Impl_Class_B * тест = новый Impl_Class_B (); } Это имеет смысл, что компилятор запутывается из-за этим способом наследования. Но моя система требует такого дизайна для этих классов. Любое решение, чтобы исправить эту проблему? Код: // Top Level (Уровень 1) класс Abstract_Class_A {}; Класс Abstract_Class_B: виртуальная общественная Abstract_Class_A {общественности: тип uint8_t; }; Класс Abstract_Class_C: виртуальная общественная Abstract_Class_A {}; // Второй уровень (Level 2) Класс Impl_Class_A: виртуальная общественная Abstract_Class_A {общественности: двойной угол; }; Класс Impl_Class_B: виртуальная общественная Abstract_Class_B, Impl_Class_A {}; Класс Impl_Class_C: виртуальная общественная Abstract_Class_C, Impl_Class_A {}; недействительный тест () {Impl_Class_B * тест = новый Impl_Class_B (); } Это имеет смысл, что компилятор запутывается из-за этим способом наследования. Но моя система требует такого дизайна для этих классов. Любое решение, чтобы исправить эту проблему? Код: // Top Level (Уровень 1) класс Abstract_Class_A {}; Класс Abstract_Class_B: виртуальная общественная Abstract_Class_A {общественности: тип uint8_t; }; Класс Abstract_Class_C: виртуальная общественная Abstract_Class_A {}; // Второй уровень (Level 2) Класс Impl_Class_A: виртуальная общественная Abstract_Class_A {общественности: двойной угол; }; Класс Impl_Class_B: виртуальная общественная Abstract_Class_B, Impl_Class_A {}; Класс Impl_Class_C: виртуальная общественная Abstract_Class_C, Impl_Class_A {}; недействительный тест () {Impl_Class_B * тест = новый Impl_Class_B (); } Любое решение, чтобы исправить эту проблему? Код: // Top Level (Уровень 1) класс Abstract_Class_A {}; Класс Abstract_Class_B: виртуальная общественная Abstract_Class_A {общественности: тип uint8_t; }; Класс Abstract_Class_C: виртуальная общественная Abstract_Class_A {}; // Второй уровень (Level 2) Класс Impl_Class_A: виртуальная общественная Abstract_Class_A {общественности: двойной угол; }; Класс Impl_Class_B: виртуальная общественная Abstract_Class_B, Impl_Class_A {}; Класс Impl_Class_C: виртуальная общественная Abstract_Class_C, Impl_Class_A {}; недействительный тест () {Impl_Class_B * тест = новый Impl_Class_B (); } Любое решение, чтобы исправить эту проблему? Код: // Top Level (Уровень 1) класс Abstract_Class_A {}; Класс Abstract_Class_B: виртуальная общественная Abstract_Class_A {общественности: тип uint8_t; }; Класс Abstract_Class_C: виртуальная общественная Abstract_Class_A {}; // Второй уровень (Level 2) Класс Impl_Class_A: виртуальная общественная Abstract_Class_A {общественности: двойной угол; }; Класс Impl_Class_B: виртуальная общественная Abstract_Class_B, Impl_Class_A {}; Класс Impl_Class_C: виртуальная общественная Abstract_Class_C, Impl_Class_A {}; недействительный тест () {Impl_Class_B * тест = новый Impl_Class_B (); } виртуальная общественность Abstract_Class_A {общественности: двойной угол; }; Класс Impl_Class_B: виртуальная общественная Abstract_Class_B, Impl_Class_A {}; Класс Impl_Class_C: виртуальная общественная Abstract_Class_C, Impl_Class_A {}; недействительный тест () {Impl_Class_B * тест = новый Impl_Class_B (); } виртуальная общественность Abstract_Class_A {общественности: двойной угол; }; Класс Impl_Class_B: виртуальная общественная Abstract_Class_B, Impl_Class_A {}; Класс Impl_Class_C: виртуальная общественная Abstract_Class_C, Impl_Class_A {}; недействительный тест () {Impl_Class_B * тест = новый Impl_Class_B (); }
IoT
1

голосов
1

ответ
32

Просмотры

Как вставить несколько дочерних объекты к тому же родителю с наследованием JPA?

В принципе у меня есть такой же вопрос, как в этом вопросе: JPA как создать новый объект с тем же идентификатором, как родительский объект (присоединенной Inheritance) Но так как этот вопрос 9 лет, вот я надеюсь, что сегодня есть решение этой проблемы. Вот моя проблема: Я использую наследование сущностей с типом наследования вступили. Субъектами являются: 1. Лицо 2. Врач (расширяет лицо) 3. Профессор (расширяет Person) Вот мой фактический вопрос: Когда я создаю врача, данные заполняются таблицы доктора и лица с тем же идентификатором, позволяет сказать, что идентификатор = 1 ==> Все хорошо до сих пор Когда я создаю профессор, данные заполняются в таблицах профессора и лица с тем же идентификатором, позволяет сказать, что идентификатор = 2 ==> Все еще хорошо до сих пор Когда существующий доктор (ID = 1) теперь также становится профессором (или наоборот), я хочу, чтобы лицо и доктор упорствовать с тем же идентификатором, и просто добавить запись в таблице профессора, а также с ИД = 1. Вот код, как я пытаюсь сделать доктор и профессор: общественная пустота makeDocAlsoProf (идентификатор) {// Найти существующий список Person человек = personRepo.findById (ID); Человек foundPerson =! Persons.isEmpty ()? persons.iterator () следующий ():. нуль; проф = новый профессор (foundPerson); // Это копирует все родительское Person поле prof.setId (foundPerson.getId ()); // Установить тот же идентификатор (ID = 1) = проф professorRepo.save (проф); // Это дает проф новый идентификатор (ID = 3)} Так что перед выполнением метода это то, что строки у меня есть в базе данных: Person: ид 1 ид 2 Врач: ID 1 Профессор: ID 2 Вот что я хочу для достижения: Person: идентификатор 1 идентификатор 2 Врач: ID 1 профессор: идентификатор 1 идентификатор 2 Вот что я получаю: Person: ID 1 идентификатор 2 идентификатор 3 (те же значения, как 1) Врач: ID 1 профессор: Идентификатор 2 Идентификатор 3 Я был бы признателен за любую помощь, даже если это не представляется возможным, возможно, намек о том, как решить эту проблему, используя другой объект модели подход или что-то еще. Заранее спасибо, ребята!
Budenzauber

Просмотр дополнительных вопросов