void main(){
int numero=123;
int * puntatore;
puntatore=№
cout << numero << endl;
cout << *puntatore << endl;
getchar();
}
123 123
Puntatore a una classe:
#include "iostream"
using namespace std;
class Classe{
public:
int variabile;
Classe(int parametro){
variabile=parametro;
}
void scrivi(){
cout << "scrivo" << endl;
getchar();
}
};
void main(){
Classe MiaClasse(234);
Classe * Puntatore;
Puntatore=&MiaClasse;
Puntatore->scrivi();
cout << Puntatore->variabile;
getchar();
}
scrivo 234
Vediamo di studiare quello strano tipo di puntatori...
Innanzitutto bisogna attivare il cosiddetto CLI.
Per farlo, devo aprire un progetto CLR.
Ecco: creo un puntatore "tradizionale":
// test1 CLR.cpp : file di progetto principale.
#include "stdafx.h"
using namespace System;
int main(array<System::String ^> ^args)
{
int numero=123;
int * puntatore = №
Console::WriteLine(numero);
Console::WriteLine(*puntatore);
Console::Read();
return 0;
}
E funziona, regolarmente:
123 123Adesso vediamo di creare quell'altro genere di puntatori...
#include "stdafx.h"
using namespace System;
int main()
{
int numero=135;
int ^ puntatore;
puntatore=numero;
Console::WriteLine(numero);
Console::WriteLine(puntatore);
Console::Read();
}
135 135Sì.
Adesso confrontiamolo con il classico modo di creare un puntatore e assegnargli l'indirizzo di una variabile:
#include "stdafx.h"
using namespace System;
int main(){
int numero=135;
int ^ puntatore;
puntatore=numero;
int *puntatoreTrad;
puntatoreTrad=№
Console::WriteLine("Puntatore Handle");
Console::WriteLine(numero);
Console::WriteLine(puntatore);
Console::WriteLine("");
Console::WriteLine("Puntatore tradizionale");
Console::WriteLine(numero);
Console::WriteLine(*puntatoreTrad);
Console::Read();
}
Puntatore Handle 135 135 Puntatore tradizionale 135 135Sì, corrisponde perfettamente.
Adesso allochiamo dinamicamente la memoria:
#include "stdafx.h"
using namespace System;
int main(){
int * puntatore=new int(123);
int ^ puntatoreNuovo=gcnew int(123);
Console::WriteLine(*puntatore);
Console::ReadLine();
Console::WriteLine(puntatoreNuovo);
Console::ReadLine();
}
123 123Sì: per allocare dinamicamente la memoria è necessario usare l'operatore gcnew.
Nessun commento:
Posta un commento