edub13 Posted March 22, 2012 at 09:42 PM Report #445231 Posted March 22, 2012 at 09:42 PM Boas pessoal, eu tenho andado a ver tutoriais do site lazyfoo (SDL), e deparei me com as Class(es), o que uso em vez disso em C? Learning: C++
pedrosorio Posted March 22, 2012 at 09:47 PM Report #445233 Posted March 22, 2012 at 09:47 PM É "perigoso" estares a seguir um tutorial de C++ e a programar em C. As classes em C++ permitem-te, entre outras coisas, definir métodos, ou seja, funções que são específicas da classe e têm acesso às variáveis do objecto em que se encontram. Em C a melhor alternativa é usares structs para representar os dados e escrever funções que recebem structs como parâmetros (possivelmente apontadores para estas structs). Não respondo a dúvidas por mensagem.
edub13 Posted March 22, 2012 at 09:50 PM Author Report #445234 Posted March 22, 2012 at 09:50 PM Entao quer dizer que não dá? Se dá como faço por exemplo? Learning: C++
pedrosorio Posted March 22, 2012 at 10:04 PM Report #445236 Posted March 22, 2012 at 10:04 PM Acabei de te explicar como é que dá. Em vez de definires as funções dentro da class (que não existe em C), usas uma struct para conter as variáveis que a class de C++ tem, e fazes funções fora da class que recebem a struct como parâmetro e a alteram. Vais reparar que as funções que estão declaradas dentro da class, no seu código acedem às variáveis da class como se fossem variáveis locais (presumo que estejas na lesson09). As funções da class Button acedem à variável box e alteram-na como se fosse uma variável local. Em C a alternativa é receberes um apontador para uma struct com essas variáveis na função, e alterá-la. Em vez de ter: Button::Button( int x, int y, int w, int h ) { //Set the button's attributes box.x = x; box.y = y; box.w = w; box.h = h; //Set the default sprite clip = &clips[ CLIP_MOUSEOUT ]; } terias void Button(struct Button *but, int x, int y, int w, int h ) { //Set the button's attributes but->box.x = x; but->box.y = y; but->box.w = w; but->box.h = h; //Set the default sprite but->clip = &clips[ CLIP_MOUSEOUT ]; } A definição da struct Button seria igual à class Button, mas sem incluir as funções. Outra diferença é que a função que mostrei acima em C++ é um construtor, quando crias um objecto da class Button, esta função é chamada automaticamente e inicializa as variáveis: Button mybutton( 170, 120, 320, 240 ); Em C terias que primeiro criar uma variável do tipo struct Button e depois chamar a função Button para inicializar as variáveis: struct Button mybutton; Button(&mybutton, 170, 120, 320, 240 ); Como vês tens que fazer várias alterações no código, mas é possível obter o mesmo funcionamento em C que o código em C++, tens é mais trabalho. Não respondo a dúvidas por mensagem.
edub13 Posted March 22, 2012 at 10:37 PM Author Report #445240 Posted March 22, 2012 at 10:37 PM Ok obrigado pelo esclarecimento 😁 Learning: C++
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now