Qual é a diferença entre uma função abstrata e uma função virtual? Em quais casos é recomendável usar virtual ou abstrato? Qual é a melhor
Na programação orientada a objetos, uma função virtual ou método virtual é uma função ou método cujo comportamento pode ser substituído em uma classe herdada por uma função com a mesma assinatura. Este conceito é uma parte muito importante da parte do polimorfismo da programação orientada a objetos (OOP).
Qual é a diferença entre uma função abstrata e uma função virtual? Em quais casos é recomendável usar virtual ou abstrato? Qual é a melhor
Estou aprendendo C ++ e estou entrando em funções virtuais. Pelo que li (no livro e online), funções virtuais são funções na classe base que você pode substituir em classes derivadas. Porém, no início do livro, ao aprender sobre herança básica, pude substituir funções básicas em classes derivadas...
Digamos que eu tenha aulas Fooe Barconfigure desta forma: class Foo { public: int x; virtual void printStuff() { std::cout << x << std::endl; } }; class Bar : public Foo { public: int y; void printStuff() { // I would like to call Foo.printStuff() here... std::cout...
Ouvi dizer que os modelos de função de membro da classe C ++ não podem ser virtuais. Isso é verdade? Se eles podem ser virtuais, qual é o exemplo de um cenário em que alguém usaria essa
Pelo que entendi, a introdução da overridepalavra-chave no C ++ 11 não passa de uma verificação para garantir que a função que está sendo implementada seja a entrada overridede uma virtualfunção na classe base. É
Com a definição de estrutura dada abaixo ... struct A { virtual void hello() = 0; }; Abordagem # 1: struct B : public A { virtual void hello() { ... } }; Abordagem # 2: struct B : public A { void hello() { ... } }; Existe alguma diferença entre essas duas maneiras de substituir a função...
Eu recebi essa pergunta quando recebi um comentário de revisão de código dizendo que as funções virtuais não precisam estar embutidas. Eu pensei que funções virtuais embutidas poderiam ser úteis em cenários em que funções são chamadas diretamente a objetos. Mas o contra-argumento me veio à mente:...
É possível escrever métodos virtuais em Java, como se faria em C ++? Ou existe uma abordagem Java apropriada que você possa implementar que produz um comportamento semelhante? Poderia, por favor, ter alguns
No meu design de classe, uso classes abstratas e funções virtuais extensivamente. Tive a sensação de que funções virtuais afetam o desempenho. Isso é verdade? Mas acho que essa diferença de desempenho não é perceptível e parece que estou fazendo otimização prematura.
Todos nós sabemos o que são funções virtuais em C ++, mas como elas são implementadas em um nível profundo? A vtable pode ser modificada ou mesmo acessada diretamente em tempo de execução? A vtable existe para todas as classes ou apenas para aquelas que têm pelo menos uma função virtual? As...
Os métodos C # em interfaces são declarados sem usar a virtualpalavra - chave e substituídos na classe derivada sem usar a overridepalavra - chave. Existe um motivo para isso? Presumo que seja apenas uma conveniência de linguagem e, obviamente, o CLR sabe como lidar com isso nos bastidores (os...
Ter pelo menos um método virtual em uma classe C ++ (ou qualquer uma de suas classes pai) significa que a classe terá uma tabela virtual e cada instância terá um ponteiro virtual. Portanto, o custo da memória é bastante claro. O mais importante é o custo de memória nas instâncias (especialmente se...
Às vezes, noto programas que travam no meu computador com o erro: "chamada de função virtual pura". Como esses programas compilam quando um objeto não pode ser criado de uma classe
Ao contrário do Java, por que o C # trata os métodos como funções não virtuais por padrão? É mais provável que seja um problema de desempenho do que outros resultados possíveis? Lembro-me de ler um parágrafo de Anders Hejlsberg sobre várias vantagens que a arquitetura existente está trazendo. Mas...
Eu tenho uma classe base com uma função virtual e quero substituir essa função em uma classe derivada. Existe alguma maneira de fazer o compilador verificar se a função que declarei na classe derivada realmente substitui uma função na classe base? Gostaria de adicionar alguma macro ou algo que...
Existe uma boa razão para não declarar um destruidor virtual para uma classe? Quando você deve especificamente evitar escrever
Eu conheço métodos virtuais de PHP ou Java. Como eles podem ser implementados em Python? Ou devo definir um método vazio em uma classe abstrata e substituí-lo?
Neste exemplo, classes Fooe Barsão fornecidas a partir de uma biblioteca. Minha classe Bazherda de ambos. struct Foo { void do_stuff (int, int); }; struct Bar { virtual void do_stuff (float) = 0; }; struct Baz : public Foo, public Bar { void func () { do_stuff (1.1f); // ERROR HERE...