Dúvidas -- Java x C++ em questão de linguagem

18 respostas
SirDominque

Gente, estou fazendo um curso de C++ no youtube rsrsr (seguindo conselho do vinygodoy(C++) ahahaha), e tenho 1 problema e 2 Dúvidas :

Problema :
Tem uma IDE decente pra trabalhar com C++?
Com decente , eu quero dizer , igual o netbeans pra java.
Com o que ,que os programadores C++ desenvolvem?

1) Dúvida
No Java Acontece Isso :

non-static method setServerIP() cannot be referenced from a static context
public static void main(String args[]) 
    {
        setServerIP();
        
    }

Porém no C++, se voce colocar o método em cima do main, nao acontece... Espera, mas não é O.O ?

-------------------------------------------------

2) Então, eu criei uma View no Codeblocks e olha o que veio de código :

#include <windows.h>

/* Declare Windows procedure */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

/* Make the class name into a global variable */
char szClassName[ ] = "CodeBlocksWindowsApp";

int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nCmdShow)
{
HWND hwnd; /* This is the handle for our window */
MSG messages; /* Here messages to the application are saved */
WNDCLASSEX wincl; /* Data structure for the windowclass */

/* The Window structure */
wincl.hInstance = hThisInstance;
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProcedure; /* This function is called by windows */
wincl.style = CS_DBLCLKS; /* Catch double-clicks */
wincl.cbSize = sizeof (WNDCLASSEX);

/* Use default icon and mouse-pointer */
wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.lpszMenuName = NULL; /* No menu */
wincl.cbClsExtra = 0; /* No extra bytes after the window class */
wincl.cbWndExtra = 0; /* structure or the window instance */
/* Use Windows's default colour as the background of the window */
wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

/* Register the window class, and if it fails quit the program */
if (!RegisterClassEx (&wincl))
return 0;

/* The class is registered, let's create the program*/
hwnd = CreateWindowEx (
0, /* Extended possibilites for variation */
szClassName, /* Classname */
"Code::Blocks Template Windows App", /* Title Text */
WS_OVERLAPPEDWINDOW, /* default window */
CW_USEDEFAULT, /* Windows decides the position */
CW_USEDEFAULT, /* where the window ends up on the screen */
544, /* The programs width */
375, /* and height in pixels */
HWND_DESKTOP, /* The window is a child-window to desktop */
NULL, /* No menu */
hThisInstance, /* Program Instance handler */
NULL /* No Window Creation data */
);

/* Make the window visible on the screen */
ShowWindow (hwnd, nCmdShow);

/* Run the message loop. It will run until GetMessage() returns 0 */
while (GetMessage (&messages, NULL, 0, 0))
{
/* Translate virtual-key messages into character messages */
TranslateMessage(&messages);
/* Send message to WindowProcedure */
DispatchMessage(&messages);
}

/* The program return-value is 0 - The value that PostQuitMessage() gave */
return messages.wParam;
}

/* This function is called by the Windows function DispatchMessage() */

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) /* handle the messages */
{
case WM_DESTROY:
PostQuitMessage (0); /* send a WM_QUIT to the message queue */
break;
default: /* for messages that we don't deal with */
return DefWindowProc (hwnd, message, wParam, lParam);
}

return 0;
}

Po que isso? Não tem nada a ver com java. Nem o do netbeans é tão complicado assim...
È isso mesmo?
Vocês mexem com isso ?

18 Respostas

faeldix

acho que trabalhar com janelas em C++ seria melhor se vc usasse o QTCreator…

SirDominque

Tem que pagar >.< ???

http://qt.digia.com/Product/

J

Tem que pagar >.< ???

http://qt.digia.com/Product/

olha direito no site antes de perguntar sô.

Sobre o codeblocks você viajou literalmente na maionese. Todo mundo usa um toolkit gráfico para desenvolver. O padrão do codeblocks é usar o wxwidgets. Isso que você fez foi escrever uma janela do windows de baixo nível. Usando as apis do sistema diretamente.

http://www.wxwidgets.org/

SirDominque

Tem que pagar >.< ???

http://qt.digia.com/Product/

olha direito no site antes de perguntar sô.

Sobre o codeblocks você viajou literalmente na maionese. Todo mundo usa um toolkit gráfico para desenvolver. O padrão do codeblocks é usar o wxwidgets. Isso que você fez foi escrever uma janela do windows de baixo nível. Usando as apis do sistema diretamente.

http://www.wxwidgets.org/

Eu olhei e la esta escrito que só tem o trial.
Mas como o Colega me sugeriu o programa, resolvi perguntar pra confirmar , ok ?

Exatamente, estou ainda aprendendo C++ , perdão.

x111

Primeiro C++ NÃO TEM NADA HAVER COM Java!

C++ e Java tem uma sintaxe parecida e é só isso! Pode-se dizer Java "copiou" a sintaxe do C então com C++ é um C com OO, a sintaxe de ambos são parecidas!

Na sua primeira duvida. C++ é uma linguagem hibrida! Você pode programar com ela tanto com OO como sem. No seu caso, você está programando sem. Então você deve declarar o método sempre antes de sua primeira chamada. Existem duas formas de fazer isso:

1)Exemplo 1
void exemplo(){
//Faz alguma coisa
}

void main(String args[]) {
  exemplo();
}
2)Exemplo 2
void exemplo();

void main(String args[]) {
  exemplo();
}

void exemplo(){
//Faz alguma coisa
}
Ah! Como eu disse, C++ não é java e isso está errado:
public static void main(String args[]) {  
        setServerIP();          
}
O "public static" não existe em C++, (na verdade existe o static em c++)! Não é assim que se cria uma função publica e estática em c++!

2) Com referência a sua segunda dúvida!
Aquilo é exatamente o que o java faz debaixo dos panos para criar uma janela para você só que você não vê isso por que ele encapsula isso numa classe (genericamente falando, claro)! O que está sendo feito ali é chamadas a funções da API do SO responsáveis pela criação da janela! Existem compiladores, como o C++ Builder, que também fazem essa abstração facilitando o uso!

Se você quer realmente apreender C++ recomendo o livro dos Deitels, C++ Como Programar
outro livro muiitooo bom é o C completo e Total! Eu aprendi a programar com esse livro e acredito que todo o programador de verdade deveria um dia lê-lo! Com ele você tem a base de C que necessita para programar em C++, fora o baita aprendizado de C!

Como já disse antes, C++ não tem nada haver com java. C++ utiliza (e muito) ponteiros e não existe garbage collector só para citar duas diferenças básicas.

faeldix

Tem que pagar >.< ???

http://qt.digia.com/Product/

olha direito no site antes de perguntar sô.

Sobre o codeblocks você viajou literalmente na maionese. Todo mundo usa um toolkit gráfico para desenvolver. O padrão do codeblocks é usar o wxwidgets. Isso que você fez foi escrever uma janela do windows de baixo nível. Usando as apis do sistema diretamente.

http://www.wxwidgets.org/

Eu olhei e la esta escrito que só tem o trial.
Mas como o Colega me sugeriu o programa, resolvi perguntar pra confirmar , ok ?

Exatamente, estou ainda aprendendo C++ , perdão.

normal cara…

o link pra versao free esta ai…
e sobre o java vs c++… tente aproveitar apenas os conceitos de orientação a objetos, tente esquecer num primeiro momento…
estou estudando a uns 3 dias e estou fascinado… o que eu mais achei FODA PRA CARALHO foi a sobrecarga de operadores, genial.

boa sorte!

J
x@ndy:
Primeiro C++ NÃO TEM NADA HAVER COM Java!

C++ e Java tem uma sintaxe parecida e é só isso! Pode-se dizer Java "copiou" a sintaxe do C então com C++ é um C com OO, a sintaxe de ambos são parecidas!

Na sua primeira duvida. C++ é uma linguagem hibrida! Você pode programar com ela tanto com OO como sem. No seu caso, você está programando sem. Então você deve declarar o método sempre antes de sua primeira chamada. Existem duas formas de fazer isso:

1)Exemplo 1
void exemplo(){
//Faz alguma coisa
}

void main(String args[]) {
  exemplo();
}
2)Exemplo 2
void exemplo();

void main(String args[]) {
  exemplo();
}

void exemplo(){
//Faz alguma coisa
}
Ah! Como eu disse, C++ não é java e isso está errado:
public static void main(String args[]) {  
        setServerIP();          
}
O "public static" não existe em C++, (na verdade existe o static em c++)! Não é assim que se cria uma função publica e estática em c++!

2) Com referência a sua segunda dúvida!
Aquilo é exatamente o que o java faz debaixo dos panos para criar uma janela para você só que você não vê isso por que ele encapsula isso numa classe (genericamente falando, claro)! O que está sendo feito ali é chamadas a funções da API do SO responsáveis pela criação da janela! Existem compiladores, como o C++ Builder, que também fazem essa abstração facilitando o uso!

Se você quer realmente apreender C++ recomendo o livro dos Deitels, C++ Como Programar
outro livro muiitooo bom é o C completo e Total! Eu aprendi a programar com esse livro e acredito que todo o programador de verdade deveria um dia lê-lo! Com ele você tem a base de C que necessita para programar em C++, fora o baita aprendizado de C!

Como já disse antes, C++ não tem nada haver com java. C++ utiliza (e muito) ponteiros e não existe garbage collector só para citar duas diferenças básicas.

Existe gerência de memória automática com smart pointers.

SirDominque

Tem que pagar >.< ???

http://qt.digia.com/Product/

olha direito no site antes de perguntar sô.

Sobre o codeblocks você viajou literalmente na maionese. Todo mundo usa um toolkit gráfico para desenvolver. O padrão do codeblocks é usar o wxwidgets. Isso que você fez foi escrever uma janela do windows de baixo nível. Usando as apis do sistema diretamente.

http://www.wxwidgets.org/

Eu olhei e la esta escrito que só tem o trial.
Mas como o Colega me sugeriu o programa, resolvi perguntar pra confirmar , ok ?

Exatamente, estou ainda aprendendo C++ , perdão.

normal cara…

o link pra versao free esta ai…
e sobre o java vs c++… tente aproveitar apenas os conceitos de orientação a objetos, tente esquecer num primeiro momento…
estou estudando a uns 3 dias e estou fascinado… o que eu mais achei FODA PRA CARALHO foi a sobrecarga de operadores, genial.

boa sorte!

Xandi e faeldix.
Muito Obrigado pelas respostas;
Eu achei que java era mais parecido com C++ …
Enfim, estou baixando esta IDE e vou continuar estudando :smiley:

x111

juliocbq:

Existe gerência de memória automática com smart pointers.

Ops, o buraco é mais embaixo!

Gerenciamento de memoria e garbage collector andam de mãos dadas mas não são a mesma coisa e ainda existe os ponteiros tradicionais, os quais eu me referia!

Um bom artigo sobre smart pointers, embora eu ache que o padawan André Lopes deva se dedicar primeiro a estudar a linguagem mais a fundo:
http://msdn.microsoft.com/en-us/library/vstudio/hh279674.aspx!

J

x@ndy:
juliocbq:

Existe gerência de memória automática com smart pointers.

Ops, o buraco é mais embaixo!

Gerenciamento de memoria e garbage collector andam de mãos dadas mas não são a mesma coisa e ainda existe os ponteiros tradicionais, os quais eu me referia!

Um bom artigo sobre smart pointers, embora eu ache que o padawan André Lopes deva se dedicar primeiro a estudar a linguagem mais a fundo:
http://msdn.microsoft.com/en-us/library/vstudio/hh279674.aspx!

Sim, garbage colection é um recurso mais avançado. O que estou dizendo é que você consegue evitar o delete com smart pointers e deixar que eles aloquem e desaloquem memoria para você. Em alguns casos é melhor que gc.

faeldix

na opiniao de vcs antes de pegar um framework como o QT por exemplo…

o que deve estudar?

linguagem + stl + oq???

J

faeldix:
na opiniao de vcs antes de pegar um framework como o QT por exemplo…

o que deve estudar?

linguagem + stl + oq???

Isso mesmo.

ViniGodoy

Linguagem + Boas práticas (Effective C++) + STL

ViniGodoy

Ou melhor, recomendo seguir esse roadmap aqui:
http://www.pontov.com.br/site/cpp/46-conceitos-basicos/88-roadmap-c

Há um ótimo livro do André Bueno no site. Em português.

ViniGodoy

Esqueci de responder a primeira dúvida. Eu sempre programo em C++ com o Visual Studio e com o QT Creator.

faeldix

achei o livro do andré bueno muito ‘corrido’.

aqui estou achando otimo… explica tintin por tintin
http://pt.wikibooks.org/wiki/Programar_em_C%2B%2B

fica ai mais uma alternativa.

E

Só um parêntese, a declaração correta de main em C++ é:

int main (int argc, char *argv[]);

Não sei por que é que o pessoal declara como “void”. Preguiça de usar um “return 0;”.

O valor de retorno de main é importante e é recomendável que seja 0 se a aplicação terminou com sucesso. É que outros programas que usem seu programa (algo que é muito comum no Unix/Linux) costumam usar esse valor de retorno do main como sinal de que a aplicação foi executada corretamente ou não.

rafadelnero

C++ é muito interessante, tenho vontade de aprender, gostaria de saber se há curso em algum lugar…

Ou alguns livros bons!

Criado 7 de janeiro de 2013
Ultima resposta 8 de jan. de 2013
Respostas 18
Participantes 7