Usar ou não usar interface no C++?

1. Usar ou não usar interface no C++?

Valdimir Putãn
s-400

(usa Outra)

Enviado em 28/10/2017 - 16:24h

Já que C++ não tem o conceito de interfaces como no java gostaria de saber se é obrigatório usar algo parecido no C++, como uma classe abstrata, pois é o seguinte: agente cria uma classe em um arquivo .h (certo?) e depois como o recomendado criamos a implementação dessa classe em um .cpp, dessa forma aqui:

Teste.h

#ifndef TESTE_H_INCLUDED
#define TESTE_H_INCLUDED

class Teste{

private:

std::string teste_do_teste;

public:

Teste(std::string teste);
~Teste(void);
};

#endif // TESTE_H_INCLUDED

Teste.cpp

#include "Teste.h"

Teste::Teste(std::string teste){

teste_do_teste=teste;

}

Teste::~Teste(void){

}



main.cpp

#include <iostream>
#include "Teste.cpp"

//teste teste

int main(){

Teste *test=new Teste("hello word");

delete test;

return 0;
}


Ai que vem minha dúvida: Por que criar uma interface sendo que a propria classe faz o trabalho da "classe abstrata" porém com o diferencial de conter atributos?

Sejam resumidos, sem escrever um artigo na resposta.

Agradeço desde já :)

OBS: A questão da pergunta "é usar ou não usar" e não "Oque é", por que fui publicar essa mesma pergunta no stackoverflow e os caras acharam outra coisa.


  


2. Re: Usar ou não usar interface no C++?

Paulo
paulo1205

(usa Ubuntu)

Enviado em 28/10/2017 - 21:28h

s-400 escreveu:

Já que C++ não tem o conceito de interfaces como no java gostaria de saber se é obrigatório usar algo parecido no C++, como uma classe abstrata, pois é o seguinte: agente cria uma classe em um arquivo .h (certo?)


O conceito existe e é usado mas, por razões históricas e pela evolução da teoria nas duas décadas que separam o C do Java, não tem o nome mesmo nome nem exatamente a mesma forma. O que existe num arquivo “.h”, se não uma especificação de interface?

O que interessa, em C, em C++ ou em Java, é que o compilador precisa saber que as funções, variáveis e tipos de dados que você utiliza a partir de uma fonte externa são válidos e estão sendo utilizados de modo correto. Para tanto é suficiente uma declaração bem feita das interfaces providas por essa fonte externa.

Ai que vem minha dúvida: Por que criar uma interface sendo que a propria classe faz o trabalho da "classe abstrata" porém com o diferencial de conter atributos?


Geralmente você usa uma classe abstrata quando pretende usar polimorfismo, i.e.: ponteiros ou referências que têm o tipo da classe base, mas cujos objetos referenciados são de classes derivadas.

Seu exemplo não traz nenhuma vantagem aparente porque você não usa polimorfismo. Você nem mesmo declarou qualquer classe abstrata, mas apenas a classe do objeto concreto que você acabou usando.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts