Alguem sabe o que e isso …
SimpleCat::SimpleCat ()
{
itsAge = new int (2);
itsWeight = new int (5);
}
Alguem sabe o que e isso …
SimpleCat::SimpleCat ()
{
itsAge = new int (2);
itsWeight = new int (5);
}
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. 
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.
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.
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; .
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.
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.
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");
} :?:
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 duranteo 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);
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 ?
Entendi sim!! Valeu!! 