Uso del Template especializado
template <class Fisica>
Fisica Fuerza(Fisica m, Fisica a) {
Fisica resultado;
resultado= m*a;
return (resultado);
};
int main (){
float m=6,a=5;
float F;
F=Fuerza<float>(m,a);
cout<<"La Fuerza es: "<<F<<endl;
return 0;
}
classes y default constructores
// classes y default constructores
#include <iostream>
#include <string>
using namespace std;
class Ejemplo {
string dato;
public:
Ejemplo (const string& str) : dato(str) {}
Ejemplo () {}
const string& contento() const {return dato;}
};
int main () {
Ejemplo foo;
Ejemplo bar ("ejemplo");
cout << "bar's contento: " << bar.contento() << '\n';
return 0;
destructores
// destructors
#include <iostream>
#include <string>
using namespace std;
class Ejemplo {
string* ptr;
public:
// constructors:
Ejemplo() : ptr(new string) {}
Ejemplo (const string& str) : ptr(new string(str)) {}
// destructor:
~Ejemplo () {delete ptr;}
// access content:
const string& content() const {return *ptr;}
};
int main () {
Ejemplo foo;
Ejemplo bar ("Example");
cout << "bar's content: " << bar.contento() << '\n';
return 0;
}
copia constructores: deep copia
// copy constructor: deep copy
#include <iostream>
#include <string>
using namespace std;
class Ejemplo {
string* ptr;
public:
Ejemplo (const string& str) : ptr(new string(str)) {}
~Ejemplo () {delete ptr;}
// copy constructor:
Ejemplo (const Ejemplo4 x) : ptr(new string(x.content()))
{}
// access content:
const string& content() const {return *ptr;}
};
int main () {
Ejemplo foo ("Ejemplo");
Ejemplo bar = foo;
cout << "bar's content: " << bar.contento() << '\n';
return 0;
}
copia
// default and delete implicit members
#include <iostream>
using namespace std;
class Rectangulo {
int base, altura;
public:
Rectangulo(int x, int y) : base(x), altura(y) {}
Rectangulo () = default;
Rectangulo (const Rectangulo & other) = delete;
int area() {return base*altura;}
};
int main () {
Rectangulo foo;
Rectangulo bar (10,20);
cout << "bar's area: " << bar.area() << '\n';
return 0;
}
funciones amiga
// friend functions
#include <iostream>
using namespace std;
class Rectangulo {
int base, altura;
public:
Rectangulo() {}
Rectangulo (int x, int y) : altura(x), base(y) {}
int area() {return base * altura;}
friend Rectangulo duplicate (const Rectangulo&);
};
Rectangulo duplicate (const Rectangulo& param)
{
Rectangulo rec;
rec.base = param.base*2;
rec.altura = param.altura*2;
return res;
}
int main () {
Rectangulo foo;
Rectangulo bar (2,3);`
foo = duplicate (bar);
cout << foo.area() << '\n';
return 0;
}
clases amigas
// class amiga
#include <iostream>
using namespace std;
class cuadrado;
class Rectangulo {
int base, altura;
public:
int area ()
{return (base * altura);}
void convertir (cuadrado a);
};
class cuadrado {
friend class Rectangulo;
private:
int side;
public:
cuadrado (int a) : side(a) {}
};
void Rectangulo::convertir (cuadrado a) {
base = a.lado;
altura= a.lado;
}
int main () {
Rectangulo rect;
cuadrado cua (4);
rect.convertir(cua);
cout << rect.area();
return 0;
}
class deriva
// clases derivada
#include <iostream>
using namespace std;
class Poligono{
protected:
int base, altura;
public:
void variables (int a, int b)
{ base=a; altura=b;}
};
class Rectangulo: public Poligono {// derivadas 1
public:
int area ()
{ return base * altura; }
};
class Triangulo: public Poligono { //derivadas 2
public:
int area ()
{ return base * altura / 2; }
};
int main () {
Rectangulo rect;
Triangulo trgl;
rect.variables(4,5);
trgl.variables(4,5);
cout << rect.area() << '\n';
cout << trgl.area() << '\n';
return 0;
}
constructor y clases derivadas
// constructor y clases derivadas
#include <iostream>
using namespace std;
class Mama {
public:
Mama ()
{ cout << "Mama: no parameters\n"; }
Mama (int a)
{ cout << "Mama: int parameter\n"; }
};
class Tia : public Mama{
public:
Tia (int a)
{ cout << "Tia: int parameter\n\n"; }
};
class Hijos: public Mama {
public:
Hijos(int a) : Mama (a)
{ cout << “Hijos: int parameter\n\n"; }
};
int main () {
Tia Ali(0);
Hijos Sebastian(0);
return 0;
template
template <class Circulo>
Circulo areaCirculo(Circulo radio) {
return 3.14 * radio * radio;
int main()
double radio = 3.3333333;
cuadradoP = areaCuadrado(lado);
areaC = areaCirculo(radio);cout<<"Area Circulo: "<<areaC<<endl;
return 0;
herencia multiple
// herecia multiple
#include <iostream>
using namespace std;
class Poligono{
protected:
int base, altura;
public:
Poligono (int a, int b) : base(a), altura(b) {}
};
class Salida {
public:
static void imprime (int i);
};
void Salida::imprime (int i) {
cout << i << '\n';
}
class Rectangulo: public Poligono, public Salida {
public:
Rectangulo(int a, int b) : Poligono(a,b) {}
int area ()
{ return base*altura; }
};
class Triangulo: public Poligono, public Salida {
public:
Triangulo (int a, int b) : Poligono(a,b) {}
int area ()
{ return base*altura/2; }
};
polimorfismo
// pointers to base class
#include <iostream>
using namespace std;
class Poligono{
protected:
int base, altura;
public:
void valores (int a, int b)
{ base=a; altura=b; }
};
class Rectangulo: public Poligono {
public:
int area()
{ return base*altura; }
};
class Triangulo: public Poligono{
public:
int area()
{ return base*altura/2; }
};
int main () {
Rectangulo rect;
Triangulo trgl;
Poligono * ppoly1 = ▭
Poligono * ppoly2 = &trgl;
ppoly1->valores (4,5);
ppoly2->valores(4,5);
cout << rect.area() << '\n';
cout << trgl.area() << '\n';
return 0;
}
miembros vitual
// virtual members
#include <iostream>
using namespace std;
class Poligono {
protected:
int base, altura;
public:
void variables (int a, int b)
{ base a; altura =b; }
virtual int area ()
{ return 0; }
};
class Rectangulo: public Poligono {
public:
int area ()
{ return base * altura; }
};
class Triangulo: public Poligono {
public:
int area ()
{ return base * altura / 2); }
};
int main () {
Rectangulo rect;
Triangulo trgl;
Poligono poly;
Poligono * ppoly1 = ▭
Poligono * ppoly2 = &trgl;
Poligono * ppoly3 = &poly;
ppoly1->variables (4,5);
ppoly2-> variables (4,5);
ppoly3-> variables (4,5);
cout << ppoly1->area() << '\n';
cout << ppoly2->area() << '\n';
cout << ppoly3->area() << '\n';
return 0;
template
template <class Cubo>
Cubo volumencub (Cubo l){
return (4*3.14*l*l*l)/3; }
int main(){
int radio=5, hco=5, hci=3, rci=2, res=6, volumenpiramide,
volumenbase, volumencubo;
volumenpiramide=volumenpir(radio,hco);
volumenbase=volumenbas(rci,hci);
volumencubo=volumencub(res);
cout<<"\t\t****PROYECTO DE POO-APLICACION DE TEMPLATE****\n";
cout<<"\t\t\t\t**ESIME-ICA***\n";
cout<<"\t\tALUMNO:CASARRUBIAS HERNANDEZ JOSE ARMANDO.\n\n";
cout<<"El volumen de la piramide es:
"<<volumenpiramide<<endl; cout<<"\nEl volumen del cubo
es: "<<volumencubo<<endl; cout<<"\nEl valor de la base es
de: "<<volumenbase<<endl; system("pause");
return 0; }