Classi ed Array di Classi

di il
14 risposte

Classi ed Array di Classi

Approccio al C++ da qualche gg, provengo da VB6/VBA e confesso parecchie difficoltà... sto pertanto "giocando" e studiando.
Utilizzo Dev C++, come compiler.

Cerco di comprendere meglio gli aspetti dei Pointer, vi espongo un test ovviamente banale ma di concetto, su cui cercavo di capire le differenze.

Creata una classe base, nel main creo 1 istanza semplice di classe e un Array con 2 istanze, e le passo a 2 funzioni che prevedono il parametro come puntatore.

Quello che fatico a comprendere è la differenza tra le 2 chiamate alle Funzioni Test1 e Test2.
Perchè passando il singolo oggetto devo mettere il simbolo di DeReferenza [&] mentre se passo l'array di oggetti no, nonostante in entrambe le funzioni l'argomento sia indicato come [NomeClasse *p]...?

#include <iostream>
#include "Class1.h"

using namespace std;
void test1(Test *p); 
void test2(Test *p,int count );

Test mfc;
Test rfc[2]={(5),(12)};
	
int main()
{
	mfc.setindex(2);
	test1(&mfc);						
	test2(rfc,sizeof(rfc)/sizeof(*rfc));
	return 0;
}

void test1(Test *p) { cout<< p->getindex()<<"\n";}
void test2(Test *p,int count )
{
	int i;
	for (int i = 0; i < count; i++)
	{
		cout<< p[i].getindex()<<"\n";
	}
}
La classe: [File Class1.h]

class Test 
{
	// Private section
	public:
		Test();			// Constructor
		Test(int index);
			int getindex() {return _index;};
			void setindex(int index);
	private:
		int _index;
};
File Class1.cpp

Test::Test()	{;}
Test::Test(int index) {_index=index;}
void Test::setindex(int index)
{
	_index=index;
}

14 Risposte

  • Re: Classi ed Array di Classi

    L'operatore &, messo dietro a una variabile, ottiene il suo indirizzo, che poi viene assegnato al puntatore in ingresso alla funzione.
    Nel secondo caso, il solo nome dell'array senza le parentesi quadre, quando viene assegnato a un puntatore viene implicitamente convertito in un puntatore al primo elemento.
    Cioè questo
    
    test2(rfc,sizeof(rfc)/sizeof(*rfc));
    
    equivale a questo
    
    test2(&rfc[0],sizeof(rfc)/sizeof(*rfc));
    
  • Re: Classi ed Array di Classi

    Chiarissima la spiegazione spero di entrare nella logica, gli automatismi mi sfuggono molto destabilizzandomi
    Grazie
  • Re: Classi ed Array di Classi

    Passare da VB a C++ non e' il massimo.

    Sarebbe meglio passare da VB a VB.NET e C#.
    In questo modo puoi scrivere praticamente lo stesso codice in entrambi i linguaggi oltre al fatto che quello che scrivi in VB.NET lo puoi usare in C# e viceversa.

    Ci sarebbe C++.NET ma comunque e' C++ quindi di per se una rogna rognosa.

    La parte piu' rogosa e' proprio l'accopiata puntatori, reference e gestione della memoria che, ""fondamentalmente"" in C++ va fatta ""a mano"" (cioe' il bagno di sangue di cui sopra).

    Puoi qualcuno ti dira' che ci sono gli ""smart-pointer"" che semplificano ""leggermente"" tale gestione, ma comunque richiede di avere "estremamente ben chiaro"" come funzionano (in questo caso hai la doccia di sangue )
  • Re: Classi ed Array di Classi

    Purtroppo non posso scegliere, certo che ho capito quasi subito che questa parte, che è fondamentale, mi mette sicuramente in difficoltà logica...

    Ho dalla mia che non è per lavoro ma per hobby, sto giocando con i microcontrollori, per modellismo e varie sempre personali, quindi l'esigenza reale non è di sopravvivenza alimentare fortunatamente.

    Tuttavia, per forma mentale, difficilmente riesco a considerare lo sviluppo sw "basta che funzioni", quindi mi prendo il tempo che serve per approfondire anche i dettagli, se riesco a non farmi demoralizzare dal "bagno di sangue".
  • Re: Classi ed Array di Classi

    Se devi programmare microcontrollori, il C++ è molto scomodo. Concentrati sul C
  • Re: Classi ed Array di Classi

    Non l'ho mai utilizzato però per giocarci potrebbe forse essere utile il micro framework .net ,puoi utilizzare a quanto sembra sia c# che vb.net :

    https://en.wikipedia.org/wiki/.NET_Micro_Framewor

  • Re: Classi ed Array di Classi

    Weierstrass ha scritto:


    Se devi programmare microcontrollori, il C++ è molto scomodo. Concentrati sul C
    Però ad esempio Mbed OS ha API in C++.

    Consiglio all'autore di dare un'occhiata a questo sito per i vari argomenti.
    https://www.learncpp.com
  • Re: Classi ed Array di Classi

    Weierstrass ha scritto:


    Se devi programmare microcontrollori, il C++ è molto scomodo. Concentrati sul C
    Il compilatore di Arduino, l'oggetto in questione è in C++
  • Re: Classi ed Array di Classi

    Alexv ha scritto:


    ...
    Consiglio all'autore di dare un'occhiata a questo sito per i vari argomenti.
    https://www.learncpp.com
    Grazie sicuramente ci guardo.
  • Re: Classi ed Array di Classi

    RIcorda che un BUON LIBRO vale 100 siti Internet.





  • Re: Classi ed Array di Classi

    Più probabile che gli serva per Arduino visto che è alle prime armi, i processori a core ARM sono complessi.

    Quello che volevo dire è che è meglio imparare bene la programmazione in C, perché poi si troverà sicuramente ad affrontare problemi con interrupt, registri, configurazioni delle periferiche eccetera, e aver di mezzo anche le rogne della programmazione ad oggetti non è il massimo della vita
  • Re: Classi ed Array di Classi

    Weierstrass ha scritto:


    Più probabile che gli serva per Arduino visto che è alle prime armi, i processori a core ARM sono complessi.
    Arduino, per progetti obbistici.

    Weierstrass ha scritto:


    Quello che volevo dire è che è meglio imparare bene la programmazione in C, perché poi si troverà sicuramente ad affrontare problemi con interrupt, registri, configurazioni delle periferiche eccetera, e aver di mezzo anche le rogne della programmazione ad oggetti non è il massimo della vita
    Ho tempo... e mi impegno.
    Grazie anche per i Libri, concordo al 100% che la carta è SACRA.
  • Re: Classi ed Array di Classi

    Ciao Alex,
    io non mi preoccuperei delle difficoltà iniziali su alcuni particolarità del linguaggio, con l'esperienza ne acquisirai la padronanza.
    Visto che sei interessato ad Arduino, piuttosto che puntare direttamente al C++, inizierei con il linguaggio C (più vicino alla macchina) con alcuni testi base (a partire da Brian W. Kernighan, Dennis M. Ritchie); poi mi interesserei delle funzioni che sovrintendono all'I/O Analogico e Digitale per connettere i diversi device impiegati (in modo da assicurare la connessione e le tempistiche con le unità) ed infine mi interesserei alla interfaccia vera e propria sfruttando l'IDE e le opportunità offerte dal C++.
    Come aspetto metodologico, io così mi sono comportato nel passato (remoto) quando si dovevano connettere dispositivi diversi a basso livello (sfruttando diversi compilatori) e magari poter utilizzare le funzionalità disponibili su apparati specifici come i mainframe (IBM, Cray, ecc.).
  • Re: Classi ed Array di Classi

    Ciao Willy, grazie.
    Non devo fare cose particolarmente complesse per ora, ma comprendo la possibile potenzialità del sistema, il fatto di avere un fine concreto mi aiuta però.
    Il progetto attuale, ovviamente sperimentale per prendere pratica, è "ridicolo" in se ed il codice per farlo funzionare l'ho già scritto in pochi gg, ma mi fa schifo pur funzionando, e non è il mio scopo, come dicevo è un percorso che prendo con grande passione e quasi ossessione di pefezionsismo purtroppo tipico del mio carattere.
    Giustamente come rilevato da Alex e Migliorabile partire da VB6/VBA pur con solide basi, non mi aiuta particolarmente per gli aspetti sttutturali del linguaggio, e, come sicuramente tutti sanno la logica OOP dei linguaggi citati poco ha a che vedere con la reale programmazione ad oggetti.
    In ogni caso sono intenzionato ad approfondire non solo la parte funzionale ma anche e soprattutto qualitativa del codice che mi ha sempre appassionato(questa è la minaccia di rompere le scatole nel Forum )
Devi accedere o registrarti per scrivere nel forum
14 risposte