//
// main.cpp
// Significato del termine virtual in C++
//
// Created by alessandro barazzuol on 06/01/21.
// Copyright © 2021 Alessandro Barazzuol. All rights reserved.
//
#include <iostream>
using namespace std;
/*
Creo una classe oggetto generica
*/
class object
{
public:
string s;
object()
{
}
object(string s)
{
this->s=s;
}
virtual void print()
{
cout<<"Sono l'oggetto object\n";
}
};
/*ora creo una classe a che deriva da object*/
class a:public object
{
public:
a()
{
}
/*il costruttore a parametri a(string,int) costruisce un oggetto
attraverso il costruttore a parametri object(string)*/
a(string s, int i):object(s)
{
}
void print()
{
cout<<"sono l'oggetto A\n";
}
};
/*ora creo una classe b che deriva sempre da object...ereditarietà multipla*/
class b:public object
{
public:
b()
{
}
void print()
{
cout<<"Sono l'oggetto B\n";
}
};
/*Ora creo una funzione wath(object) che prende un oggetto creato e ci dice
l'oggetto che è stato passato*/
void wath(object *o)
{
o->print();
}
int main()
{
/*testiamo la classe object*/
/*object *o=new object();
o->print();*/
/*chiamo la funzione wath(object) passando l'oggetto object*/
/*object oo;
wath(oo);*/
/*ora gli passo sempre un oggetto ma tipo b*/
b *B=new b();
wath(B);//molto stranamente abbiamo passato un oggetto B e ci dice che
//ha ricevuto un oggetto object ???
/*mettendo la parola chiave virtual davanti alla funzione print()
nella classe object le cose cambiano*/
/*la parola virtual fa funzionare l'ereditarietà multipla in C++*/
/*piccola considerazione: guardate cosa succede se l'oggetto
è passato per valore By Value*/
/*da questo esempio si capisce bene anche la differenza tra passaggio
By value e By reference o per puntatore*/
/*questo succede perchè passando per riferimento il compilatore avendo l'indirizzo sa perfettamente chi è l'oggetto che gli passiamo*/
}
Post Views: 521