Ir ao conteúdo
  • Cadastre-se

C++ Símbolos estranhos exóticos usados no C++ avançado acaba com tudo que aprendemos


sandrofabres

Posts recomendados

Quando somos iniciantes em C / C++, achamos que sabemos um pouco, aí vemos alguns programadores fazendo algo que seja realmente útil e descobrimos que não sabemos P* nenhuma! As linguagens  mais fáceis e menos burocráticas ou são interpretadas(o que dá a sensação de se estar fazendo programação mas sim brincando de programar) como java, python e as dotnetdavida ou apresentam um estilo de sintaxe feio e quadrado tipo VB ou Delph. Aí notamos que programação de verdade se faz com C/C++  e ASM.

 

Aí vai e vem e vemos exemplos estranhos que nos fazem refletir: 'Nossa! Não sei nada dessa linguagem, vou desistir!'  ou pelo 'grandiosismo'( exemplos homéricos envolvendo empresas e situações fora da nossa realidade) dos exemplos dados nas páginas de ajuda oficiais e dos que dominam a linguagem ou do excesso de perfeccionismo de quem posta um código para os outros aprenderem com exemplos grandes e corretinhos(com rotinas de erros e boas práticas que um iniciante AINDA não precisa) , isso afugenta. Vejam alguns exemplos abaixo

de algumas páginas de 'ajuda' que mais complicam do que ajudam:

 

1) O 'e' comercial no fim de uma varíavel, como assim? eu aprendi que & é pra retornar o endereço de alguma coisa e ficava antes da var, mas...

void WindowManager::OnButtonRelease(const XButtonEvent& e) {}

 

2) Eu aprendi que int só precedia uma variavel, só que não...
drag_start_frame_pos_ = Position<int>(x, y);
Vejam... Esse Position acima é o que? Uma função doida? Uma variável? Um inteiro que é comparado se é menor que é int? Buguei a minha mente!

 

3) O uso de dois pontinhos precedido por nada, eu estou acostumado a usar :: precedido por classes ou coisas(namespace) como std e achava que essa a regra, até um dia ver isso:
::std::lock_guard<mutex> lock(wm_detected_mutex_);  ou
using  ::std::max;


4) Esse  <WindowManager> perdido entre maior e menor? funções ou classe não são precedidos pelo tipo do que retorna? , nesse caso, essa ai debaixo

é precedida por duas coisas e uma dela entre menor e maior, o que é isso jezuis?

unique_ptr<WindowManager> WindowManager::Create(const string& display_str)

 

 

 

 

 

 

 

 

 

 

Link para o comentário
Compartilhar em outros sites

16 minutos atrás, sandrofabres disse:

Quando somos iniciantes em C / C++, achamos que sabemos um pouco, aí vemos alguns programadores fazendo algo que seja realmente útil e descobrimos que não sabemos P* nenhuma!

Há alguns níveis de programação.

1° Receita de bolo.

2° Sabe a linguagem de programação.

3° Programar por paradigmas.

 

Vamos ao primeiro, e o mais importante.

1° Receita de bolo nesse nível você vai aprender o mínimo da programação (como estrutura de dados, decisões e loops).

 

Nivel 2.

Esse é o divisor de águas, porque se você não sabe a receita de bolo ENTÃO VOCÊ NÃO PROGRAMA.

Dizer que sabe uma linguagem de programação, é não programar pra mim e a mesma coisa que não saber nada.

 

Nivel 3 esse é o mais louco de todos, porque você ainda está usando a receita de bolo. mas no final a batedeira vira um objeto (não é só aquela coisa que mistura os ingredientes) a farinha tem marca, qualidade e validade.

 

É a receita vira algo abstrato tendo varias maneiras de fazer o mesmo bolo, mas ai você percebe que não tem mais certeza se o bolo vai ficar da mesma maneira de sempre. porque o único modo de ter certeza é quando ele estiver pronto.

46 minutos atrás, sandrofabres disse:

As linguagens  mais fáceis e menos burocráticas ou são interpretadas(o que dá a sensação de se estar fazendo programação mas sim brincando de programar) como java, python e as dotnetdavida ou apresentam um estilo de sintaxe feio e quadrado tipo VB ou Delph. Aí notamos que programação de verdade se faz com C/C++  e ASM.

Eu vejo as linguagens de programação interpretadas com bons olhos, porque quando você está interpretando alguma coisa quer dizer que isso pode ser emulado mais facilmente por um computador podendo rodar em uma gama diferente de computadores.

 

Uma coisa interessante e que Delphi não é uma linguagem de programação, a linguagem que o delphi usa é o Object-pascal (é pascal puro também).

 

É isso reflete um erro bem comum que as pessoas que estão começando a programar cometem, que é não saberem no que estão programando.

Exemplo disso é as pessoas falando que programam em C e C++ sendo que sintaticamente as duas já se distanciaram faz anos (se até os compiladores fazem essa divisão, porque eu o ser humano que programa vai misturar?)

 

O seu único problema se chama foco, aprenda a receita de bolo (Logica de programação) escolha UMA linguagem de programação e tenha um objetivo.

Link para o comentário
Compartilhar em outros sites

Citação

'Nossa! Não sei nada dessa linguagem, vou desistir!'

@sandrofabres
Não, não desista. C++ é uma linguagem enorme e complexa. Não me leve a mal mas talvez apenas você pudesse ter uma aproximação mais humilde em relação a essas coisas. Vou mostrar uns exemplos sobre esses 4 pontos para você porque são pontos interessantes e um exemplo pode ser útil também para outros leitores eventualmente.

 

Tenha paciência porque posso ser desses que escrevem exemplos enormes sem sentido
 

Citação

"Quando somos iniciantes em C / C++, achamos que sabemos um pouco, aí vemos alguns programadores fazendo algo que seja realmente útil e descobrimos que não sabemos P* nenhuma! As linguagens  mais fáceis e menos burocráticas ou são interpretadas(o que dá a sensação de se estar fazendo programação mas sim brincando de programar) como java, python e as dotnetdavida ou apresentam um estilo de sintaxe feio e quadrado tipo VB ou Delph. Aí notamos que programação de verdade se faz com C/C++  e ASM."


Talvez você esteja classificando essas linguagens muito rápido para um iniciante ou saiba demais sobre elas. .Net é um framework gigante e escrever um programa usando isso nunca me fez achar que estava brincando de programar.

java é também uma linguagem enorme e bem similar a C++ em muitos aspectos, como o tratamento de classes.

 

Citação

Estilo de sintaxe feio ou quadrado


Aí eu não sei julgar ou comentar.
 

Citação

exemplos dados nas páginas de ajuda oficiais e dos que dominam a linguagem ou do excesso de perfeccionismo de quem posta um código para os outros aprenderem com exemplos grandes e corretinhos(com rotinas de erros e boas práticas que um iniciante AINDA não precisa) , isso afugenta.


Depreciar um exemplo que recebeu de graça por um suposto especialista ou em site como  o http://www.cplusplus.com por ser "grande" ou "corretinho" talvez esteja além da capacidade de julgamento de um auto-intitulado iniciante. E no geral não é uma atitude elegante ou respeitosa.
 

Vou te mostrar exemplos relacionados a suas "dúvidas" se é que você tem dúvidas.
Espero que ache "corretinho" porque estão certos.

 

Citação

"Vejam alguns exemplos abaixo de algumas páginas de 'ajuda' que mais complicam do que ajudam"


Não me leve a mal, mas você pode apenas não ter entendido. Pode ter lido na ordem errada. Pode não ter ainda experiência para ler esses exemplos...

 

De volta aos tais exemplos em C++


 

Citação

 

1) O 'e' comercial no fim de uma varíavel, como assim? eu aprendi que & é pra retornar o endereço de alguma coisa e ficava antes da var, mas...

void WindowManager::OnButtonRelease(const XButtonEvent& e) {}

 

 

Entenda que nesse caso o & está a direita do tipo também. Eu até recomendo declarar assim para quem está inciando porque a verdade é essa: 'e' é uma referência para XButtonEvent, constante.


Pois é: você não aprendeu que, como em C, declarar

 

int a;
int& b = a;
int  &c = a;

declara b e c como referências a a, algo como um ponteiro. Não vou explicar o que acontece em relação a classes passadas por referência e execução de construtores e coisas assim, porque aqui basta o exemplo com tipos primitivos, já que você ainda não conhecia isso.


Veja esse trecho:

using namespace std;
class AltaClasse
{
public:
    void mostra(int& r);
};

void mostra(int);

tem duas funções mostra() que recebem um int e o alteram:

void AltaClasse::mostra(int& r)
{
    cout <<
        "em mostra() na classe X valor = " <<
        r << endl;
    r = 200220;
    cout <<
        "em mostra() na classe X valor = " <<
        r << endl;
};  // mostra()

E essa 

void mostra(int r)
{
    cout <<
        "em mostra() na area global = " <<
        r << endl;
    r = 200219;
    cout <<
        "em mostra() na area global = " <<
        r << endl;
};  // mostra()

E esse trecho de programa

    AltaClasse a;
    auto valor = 2;
    cout << "valor em main() " << valor << endl;
    ::mostra(valor);
    cout << "valor em main() " << valor << endl;
    a.mostra(valor);
    cout << "valor em main() " << valor << endl;

E ele mostra

valor em main() 2
em mostra() na area global = 2
em mostra() na area global = 200219
valor em main() 2
em mostra() na classe X valor = 2
em mostra() na classe X valor = 200220
valor em main() 200220

E aí você entende que ao passar o valor por referência a alteração de valor na função permanece ao retornar para main: é a mesma variável. E na rotina que está fora da classe o valor é copiado então a alteracão se perde ao retornar para main()

 

Note o tal operador :: esse vou discutir a seguir.

 

Citação

 

2) Eu aprendi que int só precedia uma variavel, só que não...

drag_start_frame_pos_ = Position<int>(x, y);
Vejam... Esse Position acima é o que? Uma função doida? Uma variável? Um inteiro que é comparado se é menor que é int? Buguei a minha mente!

 


Pois é: você não aprendeu sobre a existência de TEMPLATES. Isso é o que significam esses operadores <tipo> chamados por alguns de parenteses angulares. Isso é igualzinho em java então também não aprendeu em java, uma das linguagens que criticou inicialmente.

 

Isso aí quer dizer que a classe Position é uma classe que opera possivelmente com vários tipos e nesse caso vai usar int. Atente para o exemplo abaixo
 

Veja esse pequeno programa

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    std::vector<int> vetor_de_int{ 0,1,2,3,4,5 };
    std::vector<string> vetor_de_string
        {   "muito", "complicado",
            "esse", "lance",
            "de", "template?" };
    cout << "Para um vetor de <int>" << endl;
    for (auto i : vetor_de_int) cout << i << " ";
    cout << endl;
    cout << "Para um vetor de <string>" << endl;
    for (auto i : vetor_de_string) cout << i << " ";
    cout << endl;
    cout << "Vale a pena aprender: economiza muito tempo" << endl;

    return 0;
}

Essas linhas 

    std::vector<int> vetor_de_int{ 0,1,2,3,4,5 };
    std::vector<string> vetor_de_string
        {   "muito", "complicado",
            "esse", "lance",
            "de", "template?" };

declaram e iniciam dois vetores, um com int e outro com strings, USANDO AS MESMAS CLASSES. Isso é genial e economiza um tempo do c@r@&*o porque você usa as mesmas funções com qualquer tipo. Isso é por exemplo a STL, biblioteca padrão de templates, onde você tem filas, vetores, árvores, mapas, o diabo. Só declarar e usar. E funciona com suas classes e você não tem que programar tudo de novo. 

É assim também com o framework .Net. 

 

Citação

3) O uso de dois pontinhos precedido por nada, eu estou acostumado a usar :: precedido por classes ou coisas(namespace) como std e achava que essa a regra, até um dia ver isso:
::std::lock_guard<mutex> lock(wm_detected_mutex_);  ou
using  ::std::max;


Pois é: você não aprendeu ainda que esse operador :: se chama operador de resolucão de escopo e pode ser a sua salvação para acessar algo no escopo global e que tenha desaparecido no escopo atual.

 

Imagino que não tenha entendido então vou te mostrar um exemplo "certinho"

 

Exemplo

#include <iostream>
using namespace std;
string str = "valor na area global";

int main()
{
    {
        auto str = "valor declarado em main";
        cout << "'str' declarada em main [" <<
            str << "]" << endl;
        cout << "'str' global que teria sumido [" <<
            ::str << "]" << endl;
        cout << endl;
    }
    cout << "'str' em main fora do {} [" <<
        str << "]" << endl;
    return 0;
};  // main()

mostra

'str' declarada em main [valor declarado em main]
'str' global que teria sumido [valor na area global]

'str' em main fora do {} [valor na area global]

Se você não PREFIXAR str por :: para indicar o escopo global str sempre vai ser a variável declarada em main(),  dentro dos {} em que a outra str está declarada. 

 

Fora deles --- mas claro ainda dentro de main --- a declaração 

        auto str = "valor declarado em main";

fica fora de escopo e aí volta a ser visível a str global.

 

Citação

 

4) Esse  <WindowManager> perdido entre maior e menor? funções ou classe não são precedidos pelo tipo do que retorna? , nesse caso, essa ai debaixo

é precedida por duas coisas e uma dela entre menor e maior, o que é isso jezuis?

unique_ptr<WindowManager> WindowManager::Create(const string& display_str)

 

 

Pois é: se leu até aqui já sabe que é outro TEMPLATE e que simplesmente indica que essa rotina vai retornar um unique_ptr para a classe Window_Manager
 

Espero que tenha entendido algo.

 

Se quiser os programas de teste inteiros avise e eu posto aqui. não tem mais que umas 20 linhas cada um.

 

Se tiver dúvidas volte a escrever.

 

 

 

Link para o comentário
Compartilhar em outros sites

2 horas atrás, arfneto disse:

Pois é: você não aprendeu sobre a existência de TEMPLATES. Isso é o que significam esses operadores <tipo> chamados por alguns de parenteses angulares. Isso é igualzinho em java então também não aprendeu em java, uma das linguagens que criticou inicialmente.

 

Isso aí quer dizer que a classe Position é uma classe que opera possivelmente com vários tipos e nesse caso vai usar int. Atente para o exemplo abaixo
 

Veja esse pequeno programa


#include <iostream>
#include <vector>
using namespace std;
int main()
{
    std::vector<int> vetor_de_int{ 0,1,2,3,4,5 };
    std::vector<string> vetor_de_string
        {   "muito", "complicado",
            "esse", "lance",
            "de", "template?" };
    cout << "Para um vetor de <int>" << endl;
    for (auto i : vetor_de_int) cout << i << " ";
    cout << endl;
    cout << "Para um vetor de <string>" << endl;
    for (auto i : vetor_de_string) cout << i << " ";
    cout << endl;
    cout << "Vale a pena aprender: economiza muito tempo" << endl;

    return 0;
}

Templates? Eu chamo isso em Java de " Collections Lists" onde o que está entre < e > é como se fosse um 'contrato' obrigando que a lista seja  preenchida apenas por itens  daquele tipo especificada entre < e >  para depois um iterator, como você fez, ir processando um a um. 
 

 

adicionado 53 minutos depois
2 horas atrás, arfneto disse:

Talvez você esteja classificando essas linguagens muito rápido para um iniciante ou saiba demais sobre elas. .Net é um framework gigante e escrever um programa usando isso nunca me fez achar que estava brincando de programar.

Nem os próprios programas(acessórios) do Windows são feitos com .Net , kkkkkkk! Nenhum programa pequeno que precise ser passado em uma máquina danificada como uma ferramenta de antivirus do tipo 

Kaspersky Virus Removal Tool, vai ser feita usando a trolha dos framework 4,5,6,7,8,1000 do .Net , nenhum programa famoso que eu conheço é feito em dotnet , veja o exemplo do app zello(chat de voz estilo rádio tx) , ele é pequeno, funciona, é rápido e não é cheio de DLLs, me pergunte se ele é feito em dotnet.  Alguém já construiu algum sistema operacional ou linguagem famosa usando dotnet? Eu não conheço. Será que isso tudo é coincidência ou é uma forma de nos apegarmos a soluções microsoft que nem mesmo a microsoft usa? kkkkkkkk O office foi feito .Net? Se é tão bom programar em .net porque nem a MS usa pra si?
Bom por essas questões que eu considero programar em dotnet fofo mas limitado. 

 

3 horas atrás, arfneto disse:

java é também uma linguagem enorme e bem similar a C++ em muitos aspectos, como o tratamento de classes.

A microsoft criou o .Net por raiva de não poder fazer um java para si sem levar um processos bilionários nas costas, portanto a ideia que eu tenho do dotnet é quase a mesma para o java, por mais que seja gostoso programar em java, você sabe que certas coisas você não ira se dar bem o usando como por exemplo fazer um módulo efi para o bios ou fazer um driver. 
Pra mim, uma linguagem real deve permitir eu criar soluções que não dependam dela ou da empresa que a fez e que possam controlar o hardware disponível. Ok, eu gosto de Java mas imagine ter que criar ferramentas de recuperação de sistemas nessa linguagem...

 

Link para o comentário
Compartilhar em outros sites

3 horas atrás, arfneto disse:
Citação

unique_ptr<WindowManager> WindowManager::Create(const string& display_str)

 

 

Pois é: se leu até aqui já sabe que é outro TEMPLATE e que simplesmente indica que essa rotina vai retornar um unique_ptr para a classe Window_Manager
 

Espero que tenha entendido algo.

 

Se quiser os programas de teste inteiros avise e eu posto aqui. não tem mais que umas 20 linhas cada um.

 

Se tiver dúvidas volte a escrever.

 

Mas templates em c/c++ não teria que começar com essa palavra Template bla bla bla alguma coisa? Me desculpe a ignorância. 

 

Link para o comentário
Compartilhar em outros sites

21 horas atrás, sandrofabres disse:

Se é tão bom programar em .net porque nem a MS usa pra si?

Acho que da mesma forma por que não usa Java. >_<

O tal dotnet só tem saída no mundo empresarial mesmo.

 

21 horas atrás, sandrofabres disse:

java é também uma linguagem enorme e bem similar a C++ em muitos aspectos, como o tratamento de classes.

Java é outra dotnet.
Diz a lenda que BillGates pressionou para que lhe vendessem o tal Java, coisa que lhe foi negado, então Bill dice..."Farei uma linguagem "melhor"..." Dai nasceu o net🤣. E nem precisa dizer em quem se inspirou né.

 

20 horas atrás, sandrofabres disse:

Mas templates em c/c++ não teria que começar com essa palavra Template bla bla bla alguma coisa? Me desculpe a ignorância. 

Só na hora de declarar a planilha. Da mesma forma que você faz com class e struct, por adicionar um exemplo, e logo na hora de criar o objeto você n usa essas palavras.

Para colocar um exemplo:

    template <class tipo> 
    tipo maior(tipo dato1, tipo dato2){
      return (dato1 > dato2 ? dato1 : dato2);
    }


Logo você usa isso da seguinte forma:

    int main(){
        int a = 1, b = 2, n; 
        float c = 1.0, d = 0.5, m; 
        
        n = maior <int> (a,b); // Usando enteros
        m = maior <float>(c,d);        // Usando reales
        
        cout << "Inteiro maior: " << n << endl;
        cout << "Real maior: " << m << endl;
        
        return 0; 
    }

Exemplo tirado de : https://codingornot.com/cc-plantillas-templates-en-c

Como diz no link acima, isso de usar planilhas se chama "Programação Genérica", e nem todo mundo usa isso.

 

C++ deixa doido todo mundo mesmo, sobretudo porque você tem diferentes modos de fazer a mesma coisa, porém nem sempre de forma mais fácil. Olha isso:

#include <iostream>
using namespace std;
 
int maior(int a, int b);
char maior(char a, char b); 
double maior(double a, double b);
 
int main() { 
   cout << maior('a', 'f') << endl; 
   cout << maior(15, 35) << endl; 
   cout << maior(10.254, 12.452) << endl; 
   
   return 0; 
}
 
int maior(int a, int b) { 
   if(a > b) return a; else return b; 
}

A mesma coisa usando funções sobrecarregadas.
 

Link para o comentário
Compartilhar em outros sites

Citação

Símbolos estranhos exóticos usados no C++ avançado acaba com tudo que aprendemos

 

Imagino que se leu os tópicos aqui e os programas que te mostrei tenha entendido que

  • os símbolos não são assim tão estranhos e exóticos. São até bem úteis. Apenas você talvez não conhecesse direito
  • não são recursos assim "avançados": são de uso comum
  • não vão acabar com tudo que aprendeu. Apenas vão somar ao que você já sabia: & indica referência, :: tem o outro uso que te mostrei, e templates são o que expliquei

E espero que não se sinta mais "afugentado" da linguagem.

 

Há aspectos talvez mais sinistros nessa linguagem, como lambdas, functors, herança múltipla, contrutores diversos, ou operadores com novos significados definidos pelo usuário para suas classes.

 

Ainda sobre isso...

 

Em 24/02/2020 às 03:12, sandrofabres disse:

Templates? Eu chamo isso em Java de " Collections Lists" onde o que está entre < e > é como se fosse um 'contrato' obrigando que a lista seja  preenchida apenas por itens  daquele tipo especificada entre < e >  para depois um iterator, como você fez, ir processando um a um

 

Veja na documentação em https://docs.microsoft.com/en-us/cpp/cpp/templates-cpp?view=vs-2019
 

1678074844_cpptemplate.png.11dfc999838a17ae7725ae9a8d2b177b.png

 

e entenda que esse é o nome dado em C++.

 

Em 24/02/2020 às 03:12, sandrofabres disse:

Eu chamo isso em Java de " Collections Lists" onde o que está entre < e > é como se fosse um 'contrato' obrigando que a lista seja  preenchida apenas por itens  daquele tipo especificada entre < e >  para depois um iterator, como você fez, ir processando um a um

 

Não é o caso. Você misturou os conceitos. 

 

Esse é um campo em OOP chamado generic programming, como está até escrito aí em cima na documentação da MS sobre templates. Em java isso foi introduzido como "java generics" .

 

Veja na documentação por exemplo em https://docs.oracle.com/javase/tutorial/java/generics/types.html e vai ler coisas como

 

1672610123_javagenerics.thumb.png.0df68bab17cf31432081d4803e3fabe8.png


E note a definição de generic class

 

Em 24/02/2020 às 03:12, sandrofabres disse:

Eu chamo isso em Java de " Collections Lists"

 

Claro que você pode chamar isso com o nome que quiser, mas entenda que Collection na verdade é uma classe que faz obviamente largo uso de generics porque assim fica muito mais útil. E list é uma classe que "herda de" Collection<E> e Iterable<E> , como pode ver em https://docs.oracle.com/javase/8/docs/api/java/util/List.html

 

187319211_javalists.png.e69aa3b0c651ce022c5b394ed33546c6.png

 

Veja o simples, a documentação da Oracle em https://docs.oracle.com/javase/8/docs/api/?java/util/Collections.html

 

723594553_javacollections.png.331da182cd43182d816850a56aed4a3a.png



Você parece achar que esse "contrato" é uma limitação quando escreve que


 

Em 24/02/2020 às 03:12, sandrofabres disse:

como se fosse um 'contrato' obrigando que a lista seja  preenchida apenas por itens  daquele tipo especificada entre < e >  para depois um iterator, como você fez, ir processando um a um

 

E na verdade essa isso que você chama de "obrigação" é justamente o que o nome diz: uma óbvia generalização. Generics. O contrato normalmente seria declarar um objeto como sendo de UMA classe. Uma só. E você teria um vetor de int, um vetor de char, um vetor de MinhaClasse.... Mas acho que já entendeu: com generics você pode usar <> e a classe serve para vários tipos... Note que na documentação sobre listas em java ela também descende de Iterable. É assim em C++ também: faz total sentido ao ter uma coleção usar algum tipo de iteração, certo?

 

Em 24/02/2020 às 03:12, sandrofabres disse:

Nem os próprios programas(acessórios) do Windows são feitos com .Net , kkkkkkk! Nenhum programa pequeno que precise ser passado em uma máquina danificada como uma ferramenta de antivirus do tipo 

Kaspersky Virus Removal Tool

 

Isso não é nada relevante: muitos dos acessórios do Windows tem décadas de idade e são muito simples. Não há razão para reescrever uma calculadora ou o bloco de notas or o Write para usar classes do .Net. Um anti'vírus? Não. São ferramentas simples, com interfaces simples, mas é bem provável que a interface em si tenha usado .Net e Visual Studio. E Visual Studio, o ambiente de desenvolvimento, usa .Net ...

 

Em 24/02/2020 às 03:12, sandrofabres disse:

por mais que seja gostoso programar em java, você sabe que certas coisas você não ira se dar bem o usando como por exemplo fazer um módulo efi para o bios ou fazer um driver. 
Pra mim, uma linguagem real deve permitir eu criar soluções que não dependam dela ou da empresa que a fez e que possam controlar o hardware disponível. Ok, eu gosto de Java mas imagine ter que criar ferramentas de recuperação de sistemas nessa linguagem...

 

Você ainda não entendeu uma parte importante disso: java roda em uma máquina virtual, @sandrofabres e então seria realmente um paradoxo usar java para recuperar sistemas. É preciso ter um sistema rodando, para ter a JVM rodando para poder rodar seu programa em java...

 

Em 24/02/2020 às 03:12, sandrofabres disse:

A microsoft criou o .Net por raiva de não poder fazer um java para si sem levar um processos bilionários nas costas, portanto a ideia que eu tenho do dotnet é quase a mesma para o java

 

Não, não. Entenda que Microsoft criou uma linguagem, C#, para ter uma ferramenta de desenvolvimento similar ao java. É uma confusão comum. C# é a linguagem. .Net é um framework, uma biblioteca gigante de classes tornada recentemente open source, com versoões para Linux e Mac.

 

java tem seus próprios frameworks, como Google GWT, java Server Faces, Apache Struts e muitos muitos outros.

 

10 horas atrás, vangodp disse:

O tal dotnet só tem saída no mundo empresarial mesmo.

 

10 horas atrás, vangodp disse:

java é outra dotnet.
Diz a lenda que BillGates pressionou para que lhe vendessem o tal Java, coisa que lhe foi negado, então Bill dice..."Farei uma linguagem "melhor"..." Dai nasceu o net

 

Parece sugerir que o mundo empresarial seja algo pequenino... "Só" no mundo empresarial é uma afirmação interessante. Se usa .Net onde é vantagem usar, porque essas classes aceleram muito o desenvolvimento de aplicações de diversos tipos e ninguém quer escrever tudo de novo. Mesmo no mundo acadêmico. E o mundo acadêmico não é um fim em si mesmo.

De https://dotnet.microsoft.com/
 

dotnet.png.368cac0861bb34c8a833832969968f6f.png

 

java não é outra .Net. Acho que o que pretendia dizer é que C# da Microsoft é "outra java". .Net não nasceu de java..Net gera programas para rodar num ambiente chamado CLR e cria esse conceito de managed code segundo a MS, então é um código interpreptado e uma máquina virtual, de certo modo.  Só que esses conceitos vem de muito antes. Veja por exemplo o UCSD P-System, dos '70/'80 que gerava um tal de p-code para uma máquina virtual, e vai achar bem familiar. E o VM/CMS dos '80 que usava máquinas virtuaís nos mainframes dos anos 80...

 

 

Link para o comentário
Compartilhar em outros sites

9 horas atrás, arfneto disse:

não são recursos assim "avançados": são de uso comum

E por que você precisou de mais de 19 linhas para explicá-los? 

 

9 horas atrás, arfneto disse:

Veja na documentação em https://docs.microsoft.com/en-us/cpp/cpp/templates-cpp?view=vs-2019
 

1678074844_cpptemplate.png.11dfc999838a17ae7725ae9a8d2b177b.png

 

e entenda que esse é o nome dado em C++.

Pois é, mas você estava falando de Java sendo que a figura acima se refere a C++...
 

Veja com as suas próprias palavras:
"--Pois é: você não aprendeu sobre a existência de TEMPLATES. Isso é o que significam esses operadores <tipo> chamados por alguns de parenteses angulares. Isso é igualzinho em java então também não aprendeu em java, uma das linguagens que criticou inicialmente."

 

Pelo o que você me ensinou, template é igualzinho em java demonstrando um vetor... Até onde eu sei, em JAVA,

pegar um tipo, colocá-lo entre operadores de menor e maior para designar/garantir o que(tipo) um 'array' irá receber para depois exibir via iterator , se chama Colection List Generics, a sua função é gerenciar listas. Já o template em C++ que você printou do docs microsoft se refere à  criação de um único método que poderá trabalhar com tipos diferentes sem eu precisar reescreve-lo a cada parâmetro de tipo diferente ou seja, um é uma espécie de coringa para funções para o 'preguiçoso' não perder tempo com sobrecarga, outro mexe com listas de coisas tipo {"feijão", "arroz", "manga", "pipoca" ... } .

 

 

Link para o comentário
Compartilhar em outros sites

10 horas atrás, arfneto disse:

Claro que você pode chamar isso com o nome que quiser, mas entenda que Collection na verdade é uma classe que faz obviamente largo uso de generics porque assim fica muito mais útil. E list é uma classe que "herda de" Collection<E> e Iterable<E> , como pode ver em https://docs.oracle.com/javase/8/docs/api/java/util/List.html

 

187319211_javalists.png.e69aa3b0c651ce022c5b394ed33546c6.png

 

Veja o simples, a documentação da Oracle em https://docs.oracle.com/javase/8/docs/api/?java/util/Collections.html

 

723594553_javacollections.png.331da182cd43182d816850a56aed4a3a.png

 

A definição de template que você postou da Microsoft Docs(c++)  é bem diferente da Oracle Docs (java)
Você poderia me dizer ,  como os códigos abaixo seu podem ser chamados de template se você precisou de duas linhas fazendo exatamente a mesma coisa diferenciando-se apenas pelo tipo que elas manipulam sendo que a ideia de template é justamente evitar código duplicado desnecessário para fazer as mesmas coisas usando-se tipos diferentes.


 

std::vector<int> vetor_de_int{ 0,1,2,3,4,5 };
std::vector<string> vetor_de_string  {   "muito", "complicado", "esse", "lance",  "de", "template?" };

 

E no seu docs Oracle não cita que Templates é igual a Collection List Generics só pelo fato de se ter uma superclass Generics. Se for assim, eu gostaria de saber então como fazer um método genérico em java que receba como argumentos boolean, byte, char, short, int, long, float e double e imprima em arquivos diferentes os tipos recebidos  usando-se apenas:

List<Frutas> fruta = new ArrayList<Frutas>();

 

Afinal um template em c++ que você citou da microsoft acima, é capaz de fazer isso.

 

 

 

 

Link para o comentário
Compartilhar em outros sites

13 horas atrás, arfneto disse:

Só que esses conceitos vem de muito antes. Veja por exemplo o UCSD P-System, dos '70/'80 que gerava um tal de p-code para uma máquina virtual, e vai achar bem familiar. E o VM/CMS dos '80 que usava máquinas virtuaís nos mainframes dos anos 80...

 

Esses conceitos podem até serem de muito antes mas não foi o UCSD P que a Microsoft tentou implementar uma versão dele para ela usar e por isso acabou tendo que pagar uma multa milionária à Sun.
P-System++ mas sim o J++ não foi à toa.
A Microsoft tinha a intenção de implantar o seu próprio java nas máquinas com Windows 95, se realmente ela tivesse se inspirado unicamente nos conceitos mais antigos de maquina virtual de bitcodes e não no java, ela não teria feito algo tão arriscado e oneroso como fez com o seu J++ mas sim teria feito o dotnet antes de perder na justiça a briga com a Sun. É na natureza da Microsoft perceber tardiamente o sucesso dos outros para comprar ou destruir depois criando uma versão sua. Não me admiro se no futuro não tiver um Microsoft Linux, mas isso foge ao foco do assunto.

 

Link para o comentário
Compartilhar em outros sites

4 horas atrás, sandrofabres disse:

E por que você precisou de mais de 19 linhas para explicá-los?

 

Não sei dizer. Fui escrevendo apenas. Mas espero que você tenha agora entendido mais do que são

  • referências - &
  • indicadores de escopo - ::
  • e "generics" em C++ --- <> ---
  • e que você tenha lido os exemplos. Espero ter ajudado. 

 

4 horas atrás, sandrofabres disse:

Pois é, mas você estava falando de Java sendo que a figura acima se refere a C++...
 

 

Você até reproduziu a linha que você não leu. Lá está escrito

 

gen.png.190586ae0b57bca29a9143740829c64e.png

 

Eu não consegui, mas minha expectativa era te explicar que generic programming é um tópico de programação orientada a objetos. e em C++ se consegue isso usando templates e em java usando generic classes. E te mostrei a documentação dos dois casos.

 

4 horas atrás, sandrofabres disse:

Até onde eu sei, em JAVA,

pegar um tipo, colocá-lo entre operadores de menor e maior para designar/garantir o que(tipo) um 'array' irá receber para depois exibir via iterator , se chama Colection List Generics, a sua função é gerenciar listas

 

Sim, "até onde você sabe". Mas não é o caso. Já te expliquei isso. Desculpe se pareço arrogante, mas não é minha opinião. O nome em java é generic class. Te mostrei a documentação. Não é minha opinião. List é uma interface que deriva de collection e iterable e te mostrei a declaração inclusive. E collections é uma classe genérica, um container. Veja de novo

 

list.png.230e8768665938d54df7e2c5d25bb068.png

 

e entenda que Collection e Iterable são interfaces, bem como List. Não porque EU acho. Se você ler um pouco mais disso no manual de java vai ver um exemplo da classe Box que mostra uma classe generica que pode conter qualquer tipo de objeto, tipo uma caixa, com o perdão do trocadilho.

 

3 horas atrás, sandrofabres disse:

A definição de template que você postou da Microsoft Docs(c++)  é bem diferente da Oracle Docs (java)
Você poderia me dizer ,  como os códigos abaixo seu podem ser chamados de template se você precisou de duas linhas fazendo exatamente a mesma coisa diferenciando-se apenas pelo tipo que elas manipulam sendo que a ideia de template é justamente evitar código duplicado desnecessário para fazer as mesmas coisas usando-se tipos diferentes

 

Não, não é. Porque são a mesma coisa. Não fui eu que criei isso. Você está vendo os conceitos ainda de ponta-cabeça. Talvez deva escrever mais programas com classes genéricas e vai entender melhor.

 

Veja o código de que falou, para não ter que voltar a ele:

    std::vector<int> vetor_de_int{ 0,1,2,3,4,5 };
    std::vector<string> vetor_de_string
        {   "muito", "complicado",
            "esse", "lance",
            "de", "template?" };

e entenda que "meu código" não pode MESMO ser chamado de "template". Entenda que std::vector sim é uma template class, declarada assim

template < class T, class Alloc = allocator<T> > class vector; // generic template

E eu não "precisei" usar isso duas vezes. Eu "pude" usar e foi ótimo. Isso quer dizer que eu posso declarar vector de qualquer coisa. Sabe porque? Porque vector é uma classe genérica, template class em C++, generic class em java, coisas assim. Eu posso usar todos os métodos da classe vector com minhas classes ou com tipos primitivos. Ou mesmo vector de vector. 

 

Se eu fosse escrever uma template class ela seria escrita como @vangodp te mostrou. Eu não queria escrever uma. Queria usar uma template class da STL para não ter que escrever eu duas novas classes cheias de métodos e propriedades iguais.

 

Se a classe não fosse genérica seria preciso reescrever vector para cada classe que fosse usar: vector para MyClass, vector para int, vector para float. Isso é o que generic programming resolve.

 

3 horas atrás, sandrofabres disse:

seu docs Oracle não cita que Templates é igual a Collection List Generics só pelo fato de se ter uma superclass Generics

 

Não é "meu docs". É a documentação oficial. Collection List Generics é um termo que você criou. Já te expliquei várias vezes. A propósito, o .Net Framework tem um namespace System.Collections.Generic onde estão ... interfaces genéricas.

 

3 horas atrás, sandrofabres disse:

Se for assim, eu gostaria de saber então como fazer um método genérico em java que receba como argumentos boolean, byte, char, short, int, long, float e double e imprima em arquivos diferentes os tipos recebidos  usando-se apenas:

List<Frutas> fruta = new ArrayList<Frutas>();

 

Afinal um template em c++ que você citou da microsoft acima, é capaz de fazer isso

 

Talvez deva postar isso no forum de java, mas de todo modo tem um exemplo aqui em https://docs.oracle.com/javase/tutorial/java/generics/types.html

onde fala dessa classe Box --- caixa --- e a ideia é mostrar que por ser genérica a tal classe Box pode conter qualquer objeto, inclusive outras caixas...

box.thumb.png.df697c05df6ee8d268c79d3740d7eb2d.png

Você não pode usar tipos primitivos diretamente, mas isso não é relevante já que java tem um recurso chamado autoBoxing que permite encapsular os tipos primitivos e por na classe genérica. 

 

52 minutos atrás, sandrofabres disse:

Esses conceitos podem até serem de muito antes mas não foi o UCSD P que a Microsoft tentou implementar uma versão dele para ela usar e por isso acabou tendo que pagar uma multa milionária à Sun.
P-System++ mas sim o J++ não foi à toa.
A Microsoft tinha a intenção de implantar o seu próprio java nas máquinas com Windows 95, se realmente ela tivesse se inspirado unicamente nos conceitos mais antigos de maquina virtual de bitcodes e não no java, ela não teria feito algo tão arriscado e oneroso como fez com o seu J++ mas sim teria feito o dotnet antes de perder na justiça a briga com a Sun. É na natureza da Microsoft perceber tardiamente o sucesso dos outros para comprar ou destruir depois criando uma versão sua. Não me admiro se no futuro não tiver um Microsoft Linux, mas isso foge ao foco do assunto

 

Não sei nada sobre a natureza ou futuro dessas empresas. 

 

Note que o Windows inclui há uns dois anos um kernel Linux, basta habilitar em "recursos avançados do Windows". E na loja do Windows tem distribuições como Kali, Ubuntu e SUSE que você pode instalar de graça com um click. E um IDE para o Linux que roda no Linux ou no Windows.

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

3 horas atrás, arfneto disse:

Você até reproduziu a linha que você não leu. Lá está escrito

 

gen.png.190586ae0b57bca29a9143740829c64e.png

Exato, você comentou acima que os operadores <> significavam templates e que isso era igualzinho em JAVA mas me mostrou um print de um template do Microsoft Docs onde se dá um exemplo do que é um template em C++.  Confuso!

 

 

3 horas atrás, arfneto disse:

Eu não consegui, mas minha expectativa era te explicar que generic programming é um tópico de programação orientada a objetos. e em C++ se consegue isso usando templates e em java usando generic classes. E te mostrei a documentação dos dois casos.

Desculpe, mas você citou templates dando exemplos de iterators, se as duas coisas fossem iguais não teriam nomes diferentes. iterators em C++ exige inclusão de arquivo cabeçalho com o próprio nome iterator , alem disso os seus vetores herdam métodos como begin().  Já templates não necessita arquivo de cabeçalho adicional e os métodos feitos com ele não ganha .begin() de hrança.

 

3 horas atrás, arfneto disse:

Sim, "até onde você sabe". Mas não é o caso. Já te expliquei isso. Desculpe se pareço arrogante, mas não é minha opinião. O nome em java é generic class. Te mostrei a documentação. Não é minha opinião. List é uma interface que deriva de collection e iterable e te mostrei a declaração inclusive. E collections é uma classe genérica, um container. Veja de novo

Ok, String herda Object mas nem por isso eu posso sair por aí dizendo impunemente que 'String' é um termo inventado por pessoas limitadas na linguagem e que na verdade Object é String e depois vir aqui pedir desculpas por parecer arrogante citando a documentação só para corroborar isso:
Object nome="Joãozinho da Silva";


Até funciona, mas Object aceita outros tipos e não é feita pra isso.

 

3 horas atrás, arfneto disse:

e entenda que Collection e Iterable são interfaces, bem como List. Não porque EU acho. Se você ler

Você deu exemplo de Iterator usando vetor em C++ dizendo que  era template e que isso era igualzinho em Java, estou até agora procurando na sua documentação onde em java eu uso template<typename T> para com isso gerar uma lista usando a palavra vetor...

Quanto ao nome Collection, também não sou eu que acho, o nome está na própria documentação que você mostrou e o que ele é em termos de linguagem, eu não discuti. Mas da forma que você explica, então seria correto eu parar de usar a palavra generics para usar Object kkkkkkkkkk, a afinal a documentação também me permite fazer isso e eu posso ter os mesmos resultados. kkkkkkkkkkkkkkkkkkk.

 


 

adicionado 35 minutos depois
3 horas atrás, arfneto disse:

Não, não é. Porque são a mesma coisa. Não fui eu que criei isso. Você está vendo os conceitos ainda de ponta-cabeça. Talvez deva escrever mais programas com classes genéricas e vai entender melhor.

Perfeito, a sua argumentação é sempre o que os outros dizem multiplicado por -1 ... Entendo.
Se você criou isso, eu não sei, mas a ideia de exemplificar o que é templates usando-se iterator aqui, foi sua. Veja que você mesmo trouxe depois o exemplo claro da Microsoft Docs , autoridade no assunto, que destoa completamente do seu. A prova disso é que com o exemplo da Microsoft Docs, qualquer um aprende a montar um template na hora, com o seu exemplo não.

 

3 horas atrás, arfneto disse:

Não é "meu docs". É a documentação oficial.

 Ah não! Agora vamos aumentar a digressão ainda mais discutindo sobre o que é força de expressão e figura de linguagem. Ok, dá uma olhada nesse link https://www.dicio.com.br/forca-de-expressao/
É obvio que eu sei que  docs não é seu, mesmo porque eu coloquei Oracle nele, isso foi usado por mim para reforçar a ideia que foi você que o trouce, da mesma forma que um amigo meu, não quer dizer que seja um ser humano cuja propriedade do corpo dele seja minha... 

 

3 horas atrás, arfneto disse:

Talvez deva postar isso no forum de java, mas de todo modo tem um exemplo aqui em https://docs.oracle.com/javase/tutorial/java/generics/types.html

onde fala dessa classe Box --- caixa --- e a ideia é mostrar que por ser genérica a tal classe Box pode conter qualquer objeto, inclusive outras caixas...

Mas ele é igualzinho , como você mesmo disse, de C++ para o java? Mostra pra mim nesse link como eu uso template<typename T> no genérics do java pra criar um, afinal, quem não sabe que templates são igualzinho em C++ e em Java é porque não sabe Java, como você mesmo disse. Alem de deixar subtendido que interator e generics e collection são as mesmas coisas. Eita esse povo da Sun gostava de ser redundante heim! É tipo dizer que e casa é um tijolo só porque é feita de vários deles... (ai ai lindo! não é assim que banda toca!)

Link para o comentário
Compartilhar em outros sites

5 horas atrás, sandrofabres disse:

operadores <> significavam templates e que isso era igualzinho em JAVA mas me mostrou um print de um template do Microsoft Docs onde se dá um exemplo do que é um template em C++.  Confuso!

 

Pena. Eu tentei mas não consegui te explicar. Templates em C++ e generics em java são aplicações do mesmo conceito, generic programming. Talvez alguém consiga te explicar melhor, ou uma documentação que não seja da Oracle ou da Microsoft.

 

Espero que tenha entendido o que são referências,  indicadores de escopo e algo de templates em C++. Afinal para quem se sentia afugentado pela linguagem agora você está discutindo conceitos. Afinal era sua "dúvida".

 

5 horas atrás, sandrofabres disse:

Desculpe, mas você citou templates dando exemplos de iterators, se as duas coisas fossem iguais não teriam nomes diferentes. iterators em C++ exige inclusão de arquivo cabeçalho com o próprio nome iterator

 

Não, sandro, não exige. Continue estudando e vai aprender em algum momento que vector e outras coleções genéricas iteráveis incluem iterators e é igualzinho em java. :D 

 

Veja em https://docs.microsoft.com/pt-br/cpp/standard-library/vector-class?view=vs-2019

 

iterator.png.6cdbf9fc3b315f35af3063178a10a23a.png

 

E entenda que begin() end() cbegin() e outros métodos retornam um iterator.

 

E no exemplo que eu te dei o iterator fica implícito, uma facilidade que a linguagem oferece ao escrever

    for (auto i : vetor_de_string) cout << i << " ";

O equivalente usando a declaração explícita de iterator seria

    for (
        vector<string>::iterator it = vetor_de_string.begin();
        it != vetor_de_string.end();
        it++
        )
    {
        cout << *it << " ";
    };  // for()

No primeiro caso, ao processar o auto o compilador vê que vetor_de_string é std::vector e assume que i deve ser um iterator.

 

6 horas atrás, sandrofabres disse:

Você deu exemplo de Iterator usando vetor em C++ dizendo que  era template e que isso era igualzinho em Java, estou até agora procurando na sua documentação onde em java eu uso template<typename T> para com isso gerar uma lista usando a palavra vetor...

 

Não vou mais repetir: o exemplo de 20 linhas que está aqui mostra que std::vector() é uma classe genérica e usa dois vetores de classes distintas: um vetor de int e um vetor de string.  Template e generic class são a mesma coisa.

 

meu exemplo usa uma classe genérica, vetor, de STL. Não cria uma classe genérica. Preste atenção.

 

"gerar uma lista usando a palavra vetor" não consegui entender, mas se quiser criar um vetor em java pode ver a documentação em https://docs.oracle.com/javase/8/docs/api/java/util/Vector.html#Vector--

javavector.png.0b6edb06bcdfa4bd98f1f3ba7e3ceaa9.png

 

mas de todo modo se quiser criar o mesmo vetor de string do exemplo que te dei, mas em java, escreva por exemplo

import java.util.Vector;

public class Main
{
    public static void main(String[] args)
    {
        Vector Lista = new Vector<String>();
        Lista.add("muito");
        Lista.add("complicado");
        Lista.add("esse");
        Lista.add("lance");
        Lista.add("de");
        Lista.add("template?");
    
        System.out.println(Lista);
    }   // main()
} // Main()

e vai ter mais ou menos o mesmo resultado, já que é a mesma coisa.

 

6 horas atrás, sandrofabres disse:

Quanto ao nome Collection, também não sou eu que acho, o nome está na própria documentação que você mostrou e o que ele é em termos de linguagem, eu não discuti. Mas da forma que você explica, então seria correto eu parar de usar a palavra generics para usar Object kkkkkkkkkk, a afinal a documentação também me permite fazer isso e eu posso ter os mesmos resultados. kkkkkkkkkkkkkkkkkkk

 

13 horas atrás, sandrofabres disse:

E no seu docs Oracle não cita que Templates é igual a Collection List Generics

 

Vou imaginar que nas 7 horas entre uma afirmação e outra você leu o que te expliquei e entendeu que

 

Citação

Collection List Generics

 

é um nome que você criou e não existe. E em java Collection é uma classe genérica afinal.

 

Não sei o que achou engraçado então não vou poder comentar. 

 

6 horas atrás, sandrofabres disse:

Se você criou isso, eu não sei, mas a ideia de exemplificar o que é templates usando-se iterator aqui, foi sua. Veja que você mesmo trouxe depois o exemplo claro da Microsoft Docs , autoridade no assunto, que destoa completamente do seu. A prova disso é que com o exemplo da Microsoft Docs, qualquer um aprende a montar um template na hora, com o seu exemplo não

 

Talvez porque eu estivesse tentando mostrar para alguém que não sabia o que era <type> como usar uma classe genérica em C++ e não como criar uma.... Rode o exemplo em seu computador. Pode rodar o outro em java que está aí em cima.

 

Dica: é igualzinho. Se chama generic programming esse tema. Pesquise. Comece por aqui https://en.wikipedia.org/wiki/Generic_programming

 

6 horas atrás, sandrofabres disse:

a ideia que foi você que o trouce

 

A grafia correta seria trouxe. Eu estava tentando mostrar algo a paritr de um tópico que falava sobre símbolos estranhos em C++

 

6 horas atrás, sandrofabres disse:

Alem de deixar subtendido que interator e generics e collection são as mesmas coisas. Eita esse povo da Sun gostava de ser redundante heim!

 

O termo não é redundância. Seria herança múltipla. Vou mostrar só mais uma vez

 

list.thumb.png.82357a081dc1ae618a120ff45fcb36a6.png

 

List é uma Interface e descende de DUAS outras, as que estão aí na lista. Não está subentendido que são as mesmas coisas e não são.

6 horas atrás, sandrofabres disse:

Mostra pra mim nesse link como eu uso template<typename T> no genérics do java pra criar um, afinal, quem não sabe que templates são igualzinho em C++ e em Java é porque não sabe Java, como você mesmo disse

 

Procure em https://docs.oracle.com/javase/tutorial/java/generics/types.html pelo parágrafo com esse título: A Generic Version of the Box Class e deve ajudar. Eis um resumo:

generics.png.c20946a5efe6af03119ec09db5ad08bc.png

 

Dica: é igualzinho a template class em C++ !!!!

 

Essa discussão não está mais ajudando ninguém e você parece mais interessado em criticar linguagens e mostrar conhecimento. Talvez devesse postar essas coisas em sites como o Quora https://pt.quora.com/

 

Espero que tenha resolvido suas 4 dúvidas.

 

adicionado 25 minutos depois

Bem fora do tópico, mas para mostrar como é igualzinho veja a maneira "antiga" e a "nova" de usar uma classe genérica Vetor em java e compare com C++

 

Em java

import java.util.*;
public class Main
{
    public static void main(String[] args)
    {
        Vector Lista = new Vector<String>();
        Lista.add("muito");
        Lista.add("complicado");
        Lista.add("esse");
        Lista.add("lance");
        Lista.add("de");
        Lista.add("template?");
    
        Iterator it = Lista.iterator();
        while( it.hasNext()) System.out.print(it.next() + " ");
        System.out.println();
        
        Lista.forEach(elemento -> System.out.print(elemento + " "));
        System.out.println();
    }   // main()
} // Main()

E em C++

#include <iostream> 
#include <vector>

using namespace std;
int main()
{
    std::vector<string> vetor_de_string
    { "muito", "complicado", "esse", "lance",
        "de", "template?" };
    for (
        vector<string>::iterator it = vetor_de_string.begin();
        it != vetor_de_string.end();
        it++
        )
    {
        cout << *it << " ";
    };  // for()
    cout << endl;
    for (auto i : vetor_de_string) cout << i << " ";
    cout << endl;

    return 0;
}

Os dois mostram a mesma coisa

muito complicado esse lance de template?
muito complicado esse lance de template?

Notou como é parecido, imagino...

  • Amei 2
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...