virtual-inheritance

У меня есть проблема с Visual Studio 2008, касающаяся виртуального наследования. Рассмотрим следующий пример: #include<iostream> class Print { public: Print (const char * name) { std::cout << name << std::endl; } }; class Base : public virtual Print { public: ...

У меня есть базовый класс 'Base', который является чистым виртуальным классом: class Base { public: virtual void A() = 0; virtual void B() = 0; virtual ~Base() { } // Eclipse complains that a class with virtual members must have virtual destructor }; У меня также есть 2 других класса, один и...

Размер классов, как следует при использовании виртуального наследования.. ABase=4(sizeof imem) BBase=12(sizeof imem+ABase+VBase_ptr) CBase=12(sizeof imem+ABase+VBase_ptr) Это оправдано, но я не понимаю, почему размер ABCDerived равен 24. class ABase{ int iMem; }; class BBase : public virtual ...

Рассмотрим следующее : #include <iostream> #include <string> using namespace std; class A { public: A(const char* sName) //conversion constructor : _sName(sName) {cout<<"(1)"<<endl;} ; A(const A& s) {cout<<"(2)"<<endl;} //copy constructor virtual...

На основе http://en.wikipedia.org/wiki/Virtual_inheritance class Animal { ... }; // Two classes virtually inheriting Animal: class Mammal : public virtual Animal { ... }; Я также видел книги, использующие следующий синтаксис, class Mammal : virtual public Animal { ... }; Вопрос> Какой из них я...

AFAIK, виртуальное наследование решает проблему алмаза, но что, если я использую виртуальное, чтобы просто наследовать от базового класса? В чем разница с использованием virtual здесь? class A { /* ... */ }; class B : virtual public A { /* ... */ }; ...

У меня есть код ниже: class A { }; class B: public virtual A { public: B() { cerr << "B()"; } B(const A& a) { cerr << "B(const A&)"; } }; class C: public B { }; int main(int argc, char **argv) { B *b = new B(C()); } К моему удивлению, B (...

Прямо сейчас я изучаю особенности наследования в C++ и хотел бы проверить недавно изученную концепцию виртуальных базовых классов. Я попробовал следующий простой код: #include <iostream> using namespace std; class A { private: int m_value; string m_caller; public: A(int p_value, string p...

Я использую пример в C++14 §3.11/2: struct B { long double d; }; struct D : virtual B { char c; } После запуска фрагмента ниже в clang, g++ и VS2015 #include <iostream> struct B { long double d; }; struct D : /*virtual*/ B { char c; }; int main() { std::cout << "sizeof(long double) = " &...

class A { public: void eat(){ cout<<"A";} }; class B: virtual public A { public: void eat(){ cout<<"B";} }; class C: virtual public A { public: void eat(){ cout<<"C";} }; class D: public B,C { public: void eat(){ cout<<"D";} }; int main(){ A *a...