Ромб предотвращения множественного наследования C++

Есть ли способ определить класс Нечто в C++ так, чтобы

  1. Я могу наследоваться ему
  2. Я не могу "ромб наследоваться" ему

Т.е.

class Cat: public Foo{} // okay
class Dog: public Foo{} // okay
class Weird: public Cat, public Dog {} // I want this to throw a compiler error
14
задан Kate Gregory 30 June 2010 в 14:46
поделиться

2 ответа

Помните, что что-то вроде

Type2(3.0) match {
  case t2 @ Type2(radius) => //...
}

привязывает радиус к значению 3,0 и привязывает t2 к экземпляру сопоставляемого Type2.

На примере

def findPerimeter(o: SomeObject): Perimeter = o match {
  case Type1(length, width) => new Perimeter(0, 0, length, width)
  case Type2(radius) => new Perimeter(0, 0, 2*radius, 2*radius)
  // ...
  // assume that Perimeter defines a + operator
  case MixedTypes(group @ _*) => group.reduceLeft(findPerimeter(_) + findPerimeter(_))

}

Здесь группа привязана к последовательности SomeObject , которые определяют типы . Вы можете рассматривать, точно так же, как последовательность того, что конструктор args для MixedTypes.

-121--3977835-

Как долго? Есть ли у вас какие-либо точные детали?

В любом случае, имеет смысл, что расшифровка сложнее, чем шифрование, так как шифрование не симметрично, как 123 = > abc и abc > 123.

Для получения более подробной информации предлагаю начать здесь .
Чтобы прочитать о том, как работает калькуляция, эта статья кажется очень хорошей http://www.di-mgt.com.au/rsa_alg.html

-121--3090582-

Cprogramming.com Учебное пособие: Решение алмазной проблемы в C++ с...

http://www.cprogramming.com/tutorial/virtual_inheritance.html

Попробуйте

Для этого типа проблемой может быть "Избежать" или "Решить по интерфейсу".

6
ответ дан 1 December 2019 в 16:24
поделиться

Еще один источник информации:

http://www.parashift.com/c++-faq-lite/multiple-inheritance.html

Вообще-то весь C++ faq маленький, его действительно стоит прочитать, если вы программируете на C++.

1
ответ дан 1 December 2019 в 16:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: