Browse Wiki & Semantic Web

Jump to: navigation, search
Http://dbpedia.org/resource/Virtual inheritance
  This page has no properties.
hide properties that link here 
  No properties link to this page.
 
http://dbpedia.org/resource/Virtual_inheritance
http://dbpedia.org/ontology/abstract Віртуальне успадкування (англ. virtual inhВіртуальне успадкування (англ. virtual inheritance) — в мові програмування C++, це один із варіантів успадкування. Він дозволяє розв'язати деякі проблеми множинного успадкування, зокрема «ромбовидне успадкування».Віртуальне успадкування декларується словом virtual перед іменем базового класу. Якщо при множинному успадкуванні серед базових класів є декілька екземплярів одного класу, що завжди успадковувався віртуально, то в похідному класі буде тільки одна копія даних такого класу. В коді: class Animal { public: virtual void eat;};class Mammal : public Animal { public: virtual void breathe;};class WingedAnimal : public Animal { public: virtual void flap;};// A bat is a winged mammalclass Bat : public Mammal, public WingedAnimal {};Bat bat; Виклик bat.eat є неоднозначним, оскільки компілятор не знає кого викликати: * Mammal::Animal::eat чи * WingedAnimal::Animal::eat. Насправді, це дві незалежні функії, кожну з яких можна викликати перетворюючи тип Bat до першого чи другого свого беспосереднього базового класу. Також подібна неоднозначність буде при приведенні типу Bat до типу Animal, оскільки в кожному об'єкті Bat міститься два об'єкта Animal (по одному у Mammal та WingedAnimal). Щоб уникнути такої незручної надлишковості, віртуальне успадкування зберігає тільки одну копію даних об'єкта Animal в об'єкті Bat, якщо Animal кожен раз був успадкований віртуально.mal кожен раз був успадкований віртуально. , 仮想継承(かそうけいしょう、英: Virtual inheritance)とは、C++プログラミング言語における継承の一種で、多重継承によって生じる問題(菱形継承問題)を解決するもの。どの上位クラスのメンバーを使うか曖昧さが生じる部分で、明確化する。仮想継承は、部分の合成という意味での継承よりも、継承が上位クラスへの制限を表している場合に使われる。多重継承の基底クラスは、virtual というキーワードで仮想継承であることを指定される。 , Виртуа́льное насле́дование (англ. virtual Виртуа́льное насле́дование (англ. virtual inheritance) в языке программирования C++ — один из вариантов наследования, который нужен для решения некоторых проблем, порождаемых наличием возможности множественного наследования (особенно «ромбовидного наследования»), путём разрешения неоднозначности того, методы которого из суперклассов (непосредственных классов-предков) необходимо использовать. Оно применяется в тех случаях, когда множественное наследование вместо предполагаемой полной композиции свойств классов-предков приводит к ограничению доступных наследуемых свойств вследствие неоднозначности. Базовый класс, наследуемый множественно, определяется виртуальным с помощью ключевого слова virtual.уальным с помощью ключевого слова virtual. , Virtual inheritance is a C++ technique thaVirtual inheritance is a C++ technique that ensures only one copy of a base class's member variables are inherited by grandchild derived classes. Without virtual inheritance, if two classes B and C inherit from a class A, and a class D inherits from both B and C, then D will contain two copies of A's member variables: one via B, and one via C. These will be accessible independently, using scope resolution. Instead, if classes B and C inherit virtually from class A, then objects of class D will contain only one set of the member variables from class A. This feature is most useful for multiple inheritance, as it makes the virtual base a common subobject for the deriving class and all classes that are derived from it. This can be used to avoid the diamond problem by clarifying ambiguity over which ancestor class to use, as from the perspective of the deriving class (D in the example above) the virtual base (A) acts as though it were the direct base class of D, not a class derived indirectly through a base (B or C). It is used when inheritance represents restriction of a set rather than composition of parts. In C++, a base class intended to be common throughout the hierarchy is denoted as virtual with the virtual keyword. Consider the following class hierarchy. struct Animal { virtual ~Animal = default; virtual void Eat {}};struct Mammal: Animal { virtual void Breathe {}};struct WingedAnimal: Animal { virtual void Flap {}};// A bat is a winged mammalstruct Bat: Mammal, WingedAnimal {};Bat bat; As declared above, a call to bat.Eat is ambiguous because there are two Animal (indirect) base classes in Bat, so any Bat object has two different Animal base class subobjects. So an attempt to directly bind a reference to the Animal subobject of a Bat object would fail, since the binding is inherently ambiguous: Bat b;Animal& a = b; // error: which Animal subobject should a Bat cast into, // a Mammal::Animal or a WingedAnimal::Animal? To disambiguate, one would have to explicitly convert bat to either base class subobject: Bat b;Animal& mammal = static_cast<Mammal&>(b); Animal& winged = static_cast<WingedAnimal&>(b); In order to call Eat, the same disambiguation, or explicit qualification is needed: static_cast<mammal&> (bat).Eat </mammal&> or static_cast<wingedanimal&> (bat).Eat </wingedanimal&> or alternatively bat.Mammal::Eat and bat.WingedAnimal::Eat. Explicit qualification not only uses an easier, uniform syntax for both pointers and objects but also allows for static dispatch, so it would arguably be the preferable method. In this case, the double inheritance of Animal is probably unwanted, as we want to model that the relation (Bat is an Animal) exists only once; that a Bat is a Mammal and is a WingedAnimal does not imply that it is an Animal twice: an Animal base class corresponds to a contract that Bat implements (the "is a" relationship above really means "implements the requirements of"), and a Bat only implements the Animal contract once. The real world meaning of "is a only once" is that Bat should have only one way of implementing Eat, not two different ways, depending on whether the Mammal view of the Bat is eating, or the WingedAnimal view of the Bat. (In the first code example we see that Eat is not overridden in either Mammal or WingedAnimal, so the two Animal subobjects will actually behave the same, but this is just a degenerate case, and that does not make a difference from the C++ point of view.) This situation is sometimes referred to as diamond inheritance (see Diamond problem) because the inheritance diagram is in the shape of a diamond. Virtual inheritance can help to solve this problem.nheritance can help to solve this problem. , En C++, herencia virtual es un tipo de herEn C++, herencia virtual es un tipo de herencia que solventa algunos de los problemas causados por la herencia múltiple (particularmente, el "problema del diamante") mediante la aclaración de la ambigüedad sobre qué miembros de clases padre usar. Es usada cuando la herencia está representando restricciones de un conjunto más que la composición de partes. Una clase base multi-heredada se denota como virtual con la palabra clave virtual.como virtual con la palabra clave virtual. , 虚继承 是面向对象编程中的一种技术,是指一个指定的基类,在继承体系结构中,将其成员数虚继承 是面向对象编程中的一种技术,是指一个指定的基类,在继承体系结构中,将其成员数据实例共享给也从这个基类型直接或间接派生的其它类。 举例来说:假如类A和类B各自从类X派生(非虚继承且假设类X包含一些数据成员),且类C同时多继承自类A和B,那么C的对象就会拥有两套X的实例数据(可分别独立访问,一般要用适当的消歧义限定符)。但是如果类A与B各自虚继承了类X,那么C的对象就只包含一套类X的实例数据。对于这一概念典型实现的编程语言是C++。 这一特性在多重继承应用中非常有用,可以使得虚基类对于由它直接或间接派生的类来说,拥有一个共同的基类对象实例。避免由于带有歧义的组合而产生的问题(如“菱形继承问题”)。其原理是,间接派生类(C)穿透了其父类(上面例子中的A与B),实质上直接继承了虚基类X。 这一概念一般用于“继承”在表现为一个整体,而非几个部分的组合时。在C++中,基类可以通过使用关键字virtual来声明虚继承关系。几个部分的组合时。在C++中,基类可以通过使用关键字virtual来声明虚继承关系。
http://dbpedia.org/ontology/thumbnail http://commons.wikimedia.org/wiki/Special:FilePath/Diamond_inheritance.svg?width=300 +
http://dbpedia.org/ontology/wikiPageExternalLink https://godbolt.org/z/WGfa9bYG7 + , https://godbolt.org/z/3nrejWfEW +
http://dbpedia.org/ontology/wikiPageID 1907963
http://dbpedia.org/ontology/wikiPageInterLanguageLink http://sv.dbpedia.org/resource/Multipelt_arv + , http://tr.dbpedia.org/resource/%C3%87oklu_kal%C4%B1t%C4%B1m +
http://dbpedia.org/ontology/wikiPageLength 12719
http://dbpedia.org/ontology/wikiPageRevisionID 1115669439
http://dbpedia.org/ontology/wikiPageWikiLink http://dbpedia.org/resource/File:Diamond_inheritance.svg + , http://dbpedia.org/resource/Category:C%2B%2B + , http://dbpedia.org/resource/Vtable + , http://dbpedia.org/resource/Diamond_problem + , http://dbpedia.org/resource/Subobject + , http://dbpedia.org/resource/Multiple_inheritance + , http://dbpedia.org/resource/Inheritance_%28computer_science%29 + , http://dbpedia.org/resource/Category:Class_%28computer_programming%29 + , http://dbpedia.org/resource/C%2B%2B + , http://dbpedia.org/resource/Scope_resolution_operator + , http://dbpedia.org/resource/Base_class + , http://dbpedia.org/resource/Keyword_%28computer_programming%29 +
http://dbpedia.org/property/wikiPageUsesTemplate http://dbpedia.org/resource/Template:Reflist + , http://dbpedia.org/resource/Template:%27 + , http://dbpedia.org/resource/Template:C%2B%2B_programming_language + , http://dbpedia.org/resource/Template:For +
http://purl.org/dc/terms/subject http://dbpedia.org/resource/Category:C%2B%2B + , http://dbpedia.org/resource/Category:Class_%28computer_programming%29 +
http://purl.org/linguistics/gold/hypernym http://dbpedia.org/resource/Technique +
http://www.w3.org/ns/prov#wasDerivedFrom http://en.wikipedia.org/wiki/Virtual_inheritance?oldid=1115669439&ns=0 +
http://xmlns.com/foaf/0.1/depiction http://commons.wikimedia.org/wiki/Special:FilePath/Diamond_inheritance.svg +
http://xmlns.com/foaf/0.1/isPrimaryTopicOf http://en.wikipedia.org/wiki/Virtual_inheritance +
owl:sameAs http://www.wikidata.org/entity/Q1526910 + , https://global.dbpedia.org/id/X8Uh + , http://es.dbpedia.org/resource/Herencia_virtual + , http://hu.dbpedia.org/resource/Virtu%C3%A1lis_%C3%B6r%C3%B6kl%C5%91d%C3%A9s + , http://ru.dbpedia.org/resource/%D0%92%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D0%BD%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5 + , http://uk.dbpedia.org/resource/%D0%92%D1%96%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%B5_%D1%83%D1%81%D0%BF%D0%B0%D0%B4%D0%BA%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F + , http://dbpedia.org/resource/Virtual_inheritance + , http://zh.dbpedia.org/resource/%E8%99%9A%E7%BB%A7%E6%89%BF + , http://ja.dbpedia.org/resource/%E4%BB%AE%E6%83%B3%E7%B6%99%E6%89%BF + , http://rdf.freebase.com/ns/m.065cly +
rdf:type http://dbpedia.org/ontology/TopicalConcept +
rdfs:comment 仮想継承(かそうけいしょう、英: Virtual inheritance)とは、C++プログラミング言語における継承の一種で、多重継承によって生じる問題(菱形継承問題)を解決するもの。どの上位クラスのメンバーを使うか曖昧さが生じる部分で、明確化する。仮想継承は、部分の合成という意味での継承よりも、継承が上位クラスへの制限を表している場合に使われる。多重継承の基底クラスは、virtual というキーワードで仮想継承であることを指定される。 , Virtual inheritance is a C++ technique thaVirtual inheritance is a C++ technique that ensures only one copy of a base class's member variables are inherited by grandchild derived classes. Without virtual inheritance, if two classes B and C inherit from a class A, and a class D inherits from both B and C, then D will contain two copies of A's member variables: one via B, and one via C. These will be accessible independently, using scope resolution. Instead, if classes B and C inherit virtually from class A, then objects of class D will contain only one set of the member variables from class A. Consider the following class hierarchy.A. Consider the following class hierarchy. , 虚继承 是面向对象编程中的一种技术,是指一个指定的基类,在继承体系结构中,将其成员数虚继承 是面向对象编程中的一种技术,是指一个指定的基类,在继承体系结构中,将其成员数据实例共享给也从这个基类型直接或间接派生的其它类。 举例来说:假如类A和类B各自从类X派生(非虚继承且假设类X包含一些数据成员),且类C同时多继承自类A和B,那么C的对象就会拥有两套X的实例数据(可分别独立访问,一般要用适当的消歧义限定符)。但是如果类A与B各自虚继承了类X,那么C的对象就只包含一套类X的实例数据。对于这一概念典型实现的编程语言是C++。 这一特性在多重继承应用中非常有用,可以使得虚基类对于由它直接或间接派生的类来说,拥有一个共同的基类对象实例。避免由于带有歧义的组合而产生的问题(如“菱形继承问题”)。其原理是,间接派生类(C)穿透了其父类(上面例子中的A与B),实质上直接继承了虚基类X。 这一概念一般用于“继承”在表现为一个整体,而非几个部分的组合时。在C++中,基类可以通过使用关键字virtual来声明虚继承关系。几个部分的组合时。在C++中,基类可以通过使用关键字virtual来声明虚继承关系。 , Віртуальне успадкування (англ. virtual inhВіртуальне успадкування (англ. virtual inheritance) — в мові програмування C++, це один із варіантів успадкування. Він дозволяє розв'язати деякі проблеми множинного успадкування, зокрема «ромбовидне успадкування».Віртуальне успадкування декларується словом virtual перед іменем базового класу. Якщо при множинному успадкуванні серед базових класів є декілька екземплярів одного класу, що завжди успадковувався віртуально, то в похідному класі буде тільки одна копія даних такого класу. В коді: Виклик bat.eat є неоднозначним, оскільки компілятор не знає кого викликати:скільки компілятор не знає кого викликати: , Виртуа́льное насле́дование (англ. virtual Виртуа́льное насле́дование (англ. virtual inheritance) в языке программирования C++ — один из вариантов наследования, который нужен для решения некоторых проблем, порождаемых наличием возможности множественного наследования (особенно «ромбовидного наследования»), путём разрешения неоднозначности того, методы которого из суперклассов (непосредственных классов-предков) необходимо использовать. Оно применяется в тех случаях, когда множественное наследование вместо предполагаемой полной композиции свойств классов-предков приводит к ограничению доступных наследуемых свойств вследствие неоднозначности. Базовый класс, наследуемый множественно, определяется виртуальным с помощью ключевого слова virtual.уальным с помощью ключевого слова virtual. , En C++, herencia virtual es un tipo de herEn C++, herencia virtual es un tipo de herencia que solventa algunos de los problemas causados por la herencia múltiple (particularmente, el "problema del diamante") mediante la aclaración de la ambigüedad sobre qué miembros de clases padre usar. Es usada cuando la herencia está representando restricciones de un conjunto más que la composición de partes. Una clase base multi-heredada se denota como virtual con la palabra clave virtual.como virtual con la palabra clave virtual.
rdfs:label 仮想継承 , Віртуальне успадкування , 虚继承 , Виртуальное наследование , Virtual inheritance , Herencia virtual
hide properties that link here 
http://dbpedia.org/resource/Virtual_Inheritence + http://dbpedia.org/ontology/wikiPageRedirects
http://dbpedia.org/resource/Interface_%28computing%29 + , http://dbpedia.org/resource/Fragile_base_class + , http://dbpedia.org/resource/Composition_over_inheritance + , http://dbpedia.org/resource/C%2B%2B + , http://dbpedia.org/resource/Multiple_inheritance + , http://dbpedia.org/resource/Yo-yo_problem + , http://dbpedia.org/resource/Virtual_function + , http://dbpedia.org/resource/Index_of_object-oriented_programming_articles + , http://dbpedia.org/resource/Delegation_%28object-oriented_programming%29 + , http://dbpedia.org/resource/List_of_things_described_as_virtual + , http://dbpedia.org/resource/Static_cast + , http://dbpedia.org/resource/C%2B%2B_classes + , http://dbpedia.org/resource/Go_%28programming_language%29 + , http://dbpedia.org/resource/Virtual_method_table + , http://dbpedia.org/resource/Method_overriding + , http://dbpedia.org/resource/Object_composition + , http://dbpedia.org/resource/Polymorphism_%28computer_science%29 + , http://dbpedia.org/resource/Virtual_class + , http://dbpedia.org/resource/Function_composition_%28computer_science%29 + , http://dbpedia.org/resource/Information_hiding + , http://dbpedia.org/resource/Code_reuse + , http://dbpedia.org/resource/Virtual_Inheritence + , http://dbpedia.org/resource/Virtual_base_class + http://dbpedia.org/ontology/wikiPageWikiLink
http://en.wikipedia.org/wiki/Virtual_inheritance + http://xmlns.com/foaf/0.1/primaryTopic
http://dbpedia.org/resource/Virtual_inheritance + owl:sameAs
 

 

Enter the name of the page to start semantic browsing from.