Articles of virtual

CRTP para evitar o polymorphism dynamic

Como posso usar o CRTP em C ++ para evitar a sobrecarga de funções de membros virtuais?

Implementações alternativas de mecanismos virtuais?

C ++ suporta binding dinâmica através do mecanismo virtual. Mas, como eu entendo, o mecanismo virtual é um detalhe de implementação do compilador e o padrão apenas especifica os comportamentos do que deve acontecer em cenários específicos. A maioria dos compiladores implementa o mecanismo virtual por meio da tabela virtual e do ponteiro virtual. E […]

Por que usar ‘virtual’ para propriedades de class nas definições de modelo do Entity Framework?

No seguinte blog: http://weblogs.asp.net/scottgu/archive/2010/07/16/code-first-development-with-entity-framework-4.aspx O blog contém o exemplo de código a seguir: public class Dinner { public int DinnerID { get; set; } public string Title { get; set; } public DateTime EventDate { get; set; } public string Address { get; set; } public string HostedBy { get; set; } public virtual ICollection […]

Como a inheritance virtual resolve a ambigüidade do “diamante” (inheritance múltipla)?

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<eat(); } Eu entendo o problema do diamante, e acima do código não tem esse problema. Como […]

Membros virtuais estáticos C ++?

É possível em C ++ ter uma function de membro que seja static e virtual ? Aparentemente, não há uma maneira simples de fazê-lo ( static virtual member(); é um erro de compilation), mas há pelo menos uma maneira de obter o mesmo efeito? IE: struct Object { struct TypeInformation; static virtual const TypeInformation &GetTypeInformation() […]

inheritance virtual de c ++

Problema: class Base { public: Base(Base* pParent); /* implements basic stuff */ }; class A : virtual public Base { public: A(A* pParent) : Base(pParent) {} /* … */ }; class B : virtual public Base { public: B(B* pParent) : Base(pParent) {} /* … */ }; class C : public A, public B { […]

Por que o polymorphism não funciona sem pointers / referências?

Eu já encontrei algumas perguntas sobre SO com título similar, mas quando li as respostas, elas estavam focando em diferentes partes da questão que eram realmente específicas (por exemplo, STL / containers). Alguém poderia me mostrar por que você deve usar pointers / referências para implementar o polymorphism? Eu posso entender que os pointers podem […]

Função virtual C ++ do construtor

Por que o exemplo a seguir imprime “0” e o que deve ser alterado para que ele imprima “1” como eu esperava? #include struct base { virtual const int value() const { return 0; } base() { std::cout << value() << std::endl; } virtual ~base() {} }; struct derived : public base { virtual const […]

Acessando membros da class em um ponteiro NULL

Eu estava experimentando com C ++ e achei o código abaixo muito estranho. class Foo{ public: virtual void say_virtual_hi(){ std::cout << "Virtual Hi"; } void say_hi() { std::cout <say_hi(); // works well foo->say_virtual_hi(); // will crash the app return 0; } Eu sei que a chamada de método virtual falha porque requer uma pesquisa vtable […]

C ++ Virtual / Pure Virtual Explained

O que exatamente significa se uma function é definida como virtual e é a mesma que virtual pura?