Articles of virtual

C ++ Qual é o propósito de lançar para anular?

Duplicar Possível: lançando valores de retorno não utilizados para anular Eu li algum código-fonte, e nele muitas funções virtuais nas classs de interface são declaradas e implementadas por padrão como: virtual bool FunctionName(TypeName* pointer) { (void)pointer; return true; } Posso perguntar qual é o propósito de lançar o ponteiro para anular a implementação padrão?

Chamando a function virtual do destrutor

Isso é seguro? class Derived: public PublicBase, private PrivateBase { … ~Derived() { FunctionCall(); } virtual void FunctionCall() { PrivateBase::FunctionCall(); } } class PublicBase { virtual ~PublicBase(){}; virtual void FunctionCall() = 0; } class PrivateBase { virtual ~PrivateBase(){}; virtual void FunctionCall() { …. } } PublicBase* ptrBase = new Derived(); delete ptrBase; Este código carrega […]

Por que o construtor padrão é chamado na inheritance virtual?

Eu não entendo porque no código a seguir, quando eu instanciar um object do tipo daughter , o construtor de grandmother() padrão é chamado? Eu pensei que o construtor da grandmother(int) deveria ser chamado (para seguir a especificação do meu construtor de class mother ), ou esse código não deveria ser compilado por causa da […]

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 […]