Help ( C++ )

10 respostas
pedro_lima

Alguem sabe o que e isso …

SimpleCat::SimpleCat ()
{
itsAge = new int (2);
itsWeight = new int (5);
}

10 Respostas

rodrigo.bossini

Bom, trata-se de um trecho de código escrito em C++.
SimplecCat é aparentemente uma classe, e esse trecho de código trata-se da implementação do construtor da classe Simplecat.
O :: é o operador de resolução de escopo, indica que SimpleCat() é pertencente à classe SimpleCat.

itsAge e itsWeight são ponteiros para inteiros, que provavelmente foram declarados como atributos da classe SimpleCat e no construtor estão sendo inicializados, por meio do operador new (alocação dinâmica).

Mas de toda forma talvez eu não tenha entendido o que você quis perguntar, então, explique melhor por favor, rs. :slight_smile:

Andre_Brito

Opa.
Desculpe me intrometer, mas vendo o código acima, surgiu uma dúvida. Quando ele faz

itsAge = new int (2);

Não seria mais fácil fazer atribuição direta?

itsAge = 2;

Eu penso assim porque até mesmo quando uso objetos não uso “new”. Estou fazendo errado? Eu não uso porque já usei new e sempre me esquecia de usar delete.

Abraço.

rodrigo.bossini

Não tem maneira certa ou errada…tem maneira mais adequada pros seus propósitos.

O operador new é usado pra alocar memória dinamicamente no heap. Dinamicamente quer dizer em tempo de execução.

Um exemplo de sua utilidade:

Você tá fazendo um programa que precisa ler de um arquivo um número inteiro, e esse número inteiro vai ser usado no seu programa pra indicar
o número de posições válidas de um vetor qualquer.

Com a alocação estática, você vai precisar alocar espaço desnecessário para o vetor, ou seja, determinar o tamanho dele sabendo que o número que vai ser lido do arquivo nunca vai ser maior do que esse tamanho q vc determinou.
Com alocação dinâmica você consegue alocar o vetor exatamente do tamanho que vc precisa, de acordo com o inteiro lido do arquivo, em tempo de execução.

pedro_lima

Bom, primeiro o codigo

#pragma hdrstop
#include <iostream.h>
//---------------------------------------------------------------------------

#pragma argsused
class SimpleCat
{
	public:
		SimpleCat ();
		~SimpleCat ();
			int GetAge () const {return *itsAge;}
			void SetAge (int age) {*itsAge = age;}

			int GetWeight () const {return *itsWeight;}
			void setWeight (int weight) {*itsWeight = weight;}

	private:
		int *itsAge;
		int *itsWeight;
};
SimpleCat::SimpleCat ()
{
	itsAge = new int (2);
	itsWeight = new int (5);
}
SimpleCat::~SimpleCat ()
{
	delete itsAge;
	delete itsWeight;
}

int main(int argc, char* argv[])
{
	SimpleCat *Frisky = new SimpleCat;
	cout << "Frisky is " << Frisky->GetAge() << " years old\n";
	Frisky->SetAge(5) ;
	cout << "Frisky is " << Frisky->GetAge() << " years old\n";
	delete Frisky;
	system("pause");
	return 0;
}

Eu intendi 99,9% mas queria entender o int (2) . Pois o certo seria int s ; ou int s = 1; .

rodrigo.bossini

Sintaxe do operador new em c++

int *a = new int (2);

Note que é muito similar em java. O que está acontencendo?

O operador new está chamando o construtor da “classe”** int e passando 2 como argumento.

Isso é o mesmo que fazer:

int *a = new int [2];

Ou seja, alocar um vetor de inteiros de 2 posições.

**Lembre-se de enteder TUDO em c++ como se fossem classes, até mesmo tipos primitivos.

rodrigo.bossini

Esqueça o que falei sobre

int *a = new int (2); e int *a = new int [2]; serem exatamente a mesma coisa. De fato, não são.

int *a = new int (2); Aqui, de fato está sendo chamado um construtor da "classe"int que inicializa *a com 2.
O que é equivalente a int a =2;
Se você fizer cout << *a; por exemplo, ele imprime 2.

Por se tratar de um ponteiro, você também é capaz de “navegar” pelas suas posições, como se fosse um vetor

então depois de ter feito int *a = new int (2); vc consegue acessar a[0]; a[1]; a[2]; a[3]; etc, como se fosse um vetor mesmo.

Ja int *a = new int [2]; e de fato uma alocação dinamica de vetor de duas posicoes.

Se voce fizer cout << *a; neste caso o 2 não será impresso.

edjardesouza

pra que serve o int logo após o for??
eu não consigo lembrar!
EXE:
void matriz(){

for([b]int[/b] linha=0;linha<3;linha++)
         for(int coluna=0;coluna<3;coluna++){
                 printf("\nVALOR DA LINHA:%d COLUNA:%d\n",linha+1,coluna+1);
                 scanf("%d",&mat[linha][coluna]);
                 system("cls");
         } :?:
E

edjardesouza:
pra que serve o int logo após o for??
eu não consigo lembrar!
EXE:
void matriz(){

for([b]int[/b] linha=0;linha<3;linha++)
         for(int coluna=0;coluna<3;coluna++){
                 printf("\nVALOR DA LINHA:%d COLUNA:%d\n",linha+1,coluna+1);
                 scanf("%d",&mat[linha][coluna]);
                 system("cls");
         } :?:</blockquote>

vc se refere ao int logo em “for(int” certo?

Esse “int linha = 0” define uma variável que será utilizada durante o for e depois será descartada.
Você está criando a variável dentro do for e ela só existirá e será utilizada lá.

fora de um for seria:

int i = 0;
printf("%d", i);
pedro_lima

Oi

Voce tem duas maneiras:

char s ;

int i;

for(i=0; i < 10;i++)
{
//
}

ou

int *pRect;
 
for(int i = 0; i < 10; i++)
{
//
}

entendeu ?

edjardesouza

Entendi sim!! Valeu!! :smiley:

Criado 26 de novembro de 2008
Ultima resposta 28 de nov. de 2008
Respostas 10
Participantes 5