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

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

[code]
public static void main(String args[])
{
setServerIP();

}[/code]

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


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

[code]#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;
}[/code]

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 ?

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

Tem que pagar >.< ???

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

Tem que pagar >.< ???

http://qt.digia.com/Product/ [/quote]

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/

Tem que pagar >.< ???

http://qt.digia.com/Product/ [/quote]

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/[/quote]

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.

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

[code]
void exemplo(){
//Faz alguma coisa
}

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

[code]
void exemplo();

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

void exemplo(){
//Faz alguma coisa
}
[/code]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++!

  1. 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.

Tem que pagar >.< ???

http://qt.digia.com/Product/ [/quote]

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/[/quote]

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.
[/quote]

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!

[quote=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

[code]
void exemplo(){
//Faz alguma coisa
}

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

[code]
void exemplo();

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

void exemplo(){
//Faz alguma coisa
}
[/code]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++!

  1. 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.[/quote]

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

Tem que pagar >.< ???

http://qt.digia.com/Product/ [/quote]

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/[/quote]

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.
[/quote]

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![/quote]

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:

[quote=juliocbq]
Existe gerência de memória automática com smart pointers. [/quote]

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!

[quote=x@ndy][quote=juliocbq]
Existe gerência de memória automática com smart pointers. [/quote]

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!

[/quote]

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.

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

o que deve estudar?

linguagem + stl + oq???

[quote=faeldix]na opiniao de vcs antes de pegar um framework como o QT por exemplo…

o que deve estudar?

linguagem + stl + oq???[/quote]

Isso mesmo.

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

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.

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

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.

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.

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

Ou alguns livros bons!