Ir ao conteúdo

[classes] - 1 class independente???


Cambalinho

Posts recomendados

Postado

eu percebo como se faz 1 class:

#include <stdio.h>

class oi
{
public: char *FileName;
};

int main()
{
oi FileName1;
oi FileName2;
FileName1.FileName ="oi";
FileName2.FileName ="hello";
printf("%s\n",FileName1.FileName);
printf("%s\n",FileName2.FileName);

return 0;
}

testei este codigo e notasse independente. e é isso que pertendo.

mas porque a minha class nao é dependente?

class Sound
{
public: char *FileName;

public: void Play()
{
char shortBuffer[MAX_PATH];
char command[256] = {'\0'};

GetShortPathNameA(FileName, shortBuffer, sizeof(shortBuffer) );

sprintf(command, "close %s", shortBuffer);
mciSendString(command, 0, 0, 0);
sprintf(command, "play %s", shortBuffer);
mciSendString(command, 0, 0, 0);

}

public: int IsPlaying()
{
char mcidata[MAX_PATH]; // Data is returned by some MCI requests
char shortBuffer[MAX_PATH];
char command[MAX_PATH] = {'\0'};

GetShortPathNameA(FileName, shortBuffer, sizeof(shortBuffer) );
sprintf(command, "status %s mode", shortBuffer);
mciSendString(command,mcidata,MAX_PATH,NULL);
return stricmp(mcidata,"playing");
}

public: void CloseMusic(void)
{
char shortBuffer[MAX_PATH];
char command[256] = {'\0'};

GetShortPathNameA(FileName, shortBuffer, sizeof(shortBuffer) );
sprintf(command, "close %s", shortBuffer);
mciSendString(command, 0, 0, 0);
}
};

Sound BackGround;
Sound Points;
//Play the Background music
sprintf(FileName, "%s\\Sounds\\Background.wav",szCurrentDirectory);
BackGround.FileName = FileName;
BackGround.Play();
if (BackGround.IsPlaying()!=0) BackGround.Play();
//se panhar o diamante, o sound Points é executado.

mas se uso:

if (BackGround.IsPlaying()!=0) BackGround.Play();

porque é que verifica o Points em vez do background?

(para executar o Points tive de usar multitarefa)

Postado

Eu realmente não entendi a tua dúvida. A classe não é independente, mas os objetos são.

O que quero dizer é que, se você tiver algum método ou atributo estatico na sua classe, ela será "global" para a classe. Todos os outros serão independentes para cada objeto (e você não usa nenhum estático).

Se tiver como posta o resto do código (do main) e informa melhor qual o erro.

@edit

A variável FileName foi declara num escopo global?

Postado
Eu realmente não entendi a tua dúvida. A classe não é independente, mas os objetos são.

O que quero dizer é que, se você tiver algum método ou atributo estatico na sua classe, ela será "global" para a classe. Todos os outros serão independentes para cada objeto (e você não usa nenhum estático).

Se tiver como posta o resto do código (do main) e informa melhor qual o erro.

@edit

A variável FileName foi declara num escopo global?

char FileName[255];
char FileName[255];
char szCurrentDirectory[MAX_PATH];
Sound Points;
Sound BackGround;

//obtenho o nome da pasta onde está o exe pelo titlo da janela
GetFolderName( Console.WindowHandle ,szCurrentDirectory);

//Executa a musica de fundo
sprintf(FileName, "%s\\Sounds\\Background.wav",szCurrentDirectory);
BackGround.FileName = FileName;
BackGround.Play();

//Prepara musica dos pontos
sprintf(FileName, "%s\\Sounds\\Points.wav",szCurrentDirectory);
Points.FileName = FileName;

//dentro de 1 loop
if (BackGround.IsPlaying()==false) BackGround.Play();
//mas trabalha como esta linha
if (Points.IsPlaying()==false) Points.Play();



//eis a funçao
char *GetFolderName(HWND WindowHandle, char *Destination)
{
int i=0;
int a=0;
char szCurrentDirectory[MAX_PATH];
Sleep(10);
GetWindowText(WindowHandle, szCurrentDirectory,MAX_PATH);
//from string len see the index of '\\'
for(i=strlen(szCurrentDirectory); i!=0; i--)
{
if (szCurrentDirectory[i]=='\\')
{
a=i;
break;
}
}
if (szCurrentDirectory[0]=='"')
{
for(i=1;i<a;i++)
{
Destination[i-1]=szCurrentDirectory[i];
}
Destination[a-1] = '\0';
}
else
{
for(i=0;i<a;i++)
{
Destination[i]=szCurrentDirectory[i];
}
Destination[a] = '\0';
}
return Destination;
}

eu nao percebo a reacçao daquele 'if':(

eu alterei o IsPalying():

public: bool IsPlaying()
{
char mcidata[MAX_PATH]; // Data is returned by some MCI requests
char shortBuffer[MAX_PATH];
char command[MAX_PATH] = {'\0'};

GetShortPathNameA(FileName, shortBuffer, sizeof(shortBuffer) );
sprintf(command, "status %s mode", shortBuffer);
mciSendString(command,mcidata,MAX_PATH,NULL);
if (stricmp(mcidata,"playing")==0)
{
return true;
}
else
{
return false;
}
}

(o resto da class é igual)

fiz o teste com o debug e o FilaName da class(das 2 variavies) parece ser o mesmo. o que nao é normal. mas com mais paciencia posso resolver isso;)

Postado

ao fazer 1 class, como sei que os objectos sao inalterados?

ou seja: imagina criar 2 variaveis da mesma class, como sei que a variavel1 nao altera os dados na variavel2?

eu quero variaveis independentes. alguem me falou do construt e destruct, mas nao sei. alguem me pode explicar?

Postado

ja resolvi o problema:

1 - meti a Variavel FileName privada;

2 - criei 1 'propriedade' para alterar os valores.

e ja esta;)

class Sound
{
private:
char FileName[MAX_PATH];

public:
void SetFileName(char *NewFilename)
{
strcpy(FileName, NewFilename);
}
public:
char *GetFileName()
{
return (FileName);
}

void Play()
{
char shortBuffer[MAX_PATH];
char command[256] = {'\0'};

GetShortPathNameA(FileName, shortBuffer, sizeof(shortBuffer) );

sprintf(command, "close %s", shortBuffer);
mciSendString(command, 0, 0, 0);
sprintf(command, "play %s", shortBuffer);
mciSendString(command, 0, 0, 0);

}

public: bool IsPlaying()
{
char mcidata[MAX_PATH]; // Data is returned by some MCI requests
char shortBuffer[MAX_PATH];
char command[MAX_PATH] = {'\0'};

GetShortPathNameA(FileName, shortBuffer, sizeof(shortBuffer) );
sprintf(command, "status %s mode", shortBuffer);
mciSendString(command,mcidata,MAX_PATH,NULL);
if (stricmp(mcidata,"playing")==0)
{
return true;
}
else
{
return false;
}
}

public: void CloseMusic(void)
{
char shortBuffer[MAX_PATH];
char command[256] = {'\0'};

GetShortPathNameA(FileName, shortBuffer, sizeof(shortBuffer) );
sprintf(command, "close %s", shortBuffer);
mciSendString(command, 0, 0, 0);
}
};

muito obrigado por tudo

  • Moderador
Postado

Caso o autor do tópico necessite, o mesmo será reaberto, para isso deverá entrar em contato com a moderação solicitando o desbloqueio.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!