#30 Ahora mismo estoy dando Java, es que nunca lo habia escuchado xD, quizas sepa que es pero no sepa ese termino=S
#31 no se si te lo habran nombrado, accedentes y mutadores se puede decir en español.
En c# se pueden hacer de manera automatica, en php si no me equivoco son metodos magicos
Digamos que son esenciales en la POO
Dan acceso para modificar y/o acceder los valores de los atributos privados. Es especialmente útil puesto que ayuda a mejorar la seguridad y estabilidad de las clases al no tener atributos publicos que no sean necesarios por ejemplo y tambien es muy util en la herencia privada que creo solo veras en c++ (si la ves) en java no estoy muy puesto pero creo que no hay herencia privada en si
accedentes y mutadores se puede decir en español.
Primera vez en mi vida q lo escucho y esta verano acabo la carrera xDDD
#1 no es por meter cizaña ni nada, pero tú hace nada me estabas discutiendo en cierto hilo cierta cosa... xD
Veo que ya te han ayudado, así que solo te puedo consolar diciéndote que si el profesor te ha mandado más que al resto es que te ve potencial de poder hacerlo y aprender/llegar más lejos que el resto de tus compañeros. Aprovéchalo.
#32 Para eso esta el protected
En java tienes:
public - Todos lo ven
protected - Las subclases lo ven
private - Nadie lo ve , solo la propia clase
Yo no lo considero mas complicado que el resto, es simplemente que #1 no sabe lo que es un vector.
public class Vector3D {
private int i;
private int j;
private int k;
public Vector3D(int x, int y , int z) {
this.x = x;
this.y = y;
this.z = z;
}
public void prodEscalar(int x) {
this.x = this.x * x;
this.y = this.y * x;
this.z = this.z * x;
}
public Vector3D prodEscalarNew(int x) {
return new Vector3D( this.x * x,
this.y = this.y * x,
this.z * x);
}
public Vector3D prodVectorial(Vector3D v){
return new Vector3D(
this.y * v.z - this.z * v.y,
this.z * v.x - this.x * v.z,
this.x * v.y - this.y * v.x
);
}
public String toString() {
return new StringBuilder(Vector3D.class.getName())
.append("[ x=").append(x)
.append(",y=").append(y)
.append(",z=").append(z).append(" ] ")
.toString();
}
}
#35 protected es una basura, porque no solo lo ven las subclases como tu dices sino que tienes acceso directo desde fuera (subclases) a atributos de esa clase -.- aunque se heredan como atributos privados, ergo es basuraca. Rompe la encapsulación y la ocultación.
Por cierto normalmente cuando te enseñan eso te prohiben usar atributos protegidos, porque para empezar ni son necesarios ni son recomendables
¿Que se usen? Por desgracia se usan mucho, pero principalmente porque o bien el programador es un vago o bien no sabe programar decentemente.
#36 En si, el tener el protected es para metodos y tal, pero tal y como esta, se puede usar para atributos.
Yo lo uso para el logger.
#37 protegido para metodos lo he visto muchisimo en c# no se si es una costumbre ahi ya no me meto, simplemente me refiero a atributos.
De todas formas he leido que lo usan en herencia (c#) para metodos virtuales (¿?).
Es que no lo entiendo si es virtual ponlo publico, que cojones más dara xD
#38 Imagino que sera para que lo sobre-escribas, y que el virtual de la clase principal es la implementacion por defecto. ¿ no ?
pero eso da igual que sea protegido o publico, me refiero si un metodo es virtual en la superclase por narices en la subclase tienes que redefinir la implementación, pero en cualquier caso solo afecta a objetos de la subclase, entonces que sea esa la razon para poner protected es ilogico xD
Creo que es evidente que la "intención" didáctica del problema de #1 es practicar la sobrecarga de operadores aunque no lo especifique claramente el enunciado y se pueda hacer tb utilizando métodos "normales". Lo digo por el código de #35 que está perfecto, pero con C++ se puede hilar bastante más fino.
Salu2
#42 Yeah! Bueno, en mates creo que sería:
v1 · v2 = pescalar
v1 x v2 = pvectorial (pero como no hay operador 'x' ni '·' se sobrecargan otros y ya ta).
Luego está el toString() de Java que en C++ no existe como tal y en vez de eso se pueden sobrecargar los operadores << >>
La idea (que yo entiendo) es que por ejemplo en el main puedas hacer un:
cout << v1*v2;
y te muestre el producto escalar (y así con todas las operaciones).
El problema es "sencillo" en Java y en C++ porque se reduce a saber un par de definiciones matemáticas sencillas, pero en C++ (el lenguaje de las pajas mentales) se puede liar la cosa más.
Salu2
Hasta aqui he llegado, no consigo terminar la ultima parte y tengo que entregar el ejercicio esta tarde... os dejo el codigo a ver si alguno es capaz de hacerlo porque lo que es yo...nada xD, el case 5: del final, osea el producto escalar de dos vectores y el producto vectorial de dos vectores.
#include <iostream>
using namespace std;
//Creamos la clase vector
class vector
{
private:
int x, y, z;
public:
//Inicializamos un vector
vector(int, int, int);
//Suma de dos vectores.
vector operator+(vector);
//Resta de dos vectores.
vector operator-(vector);
//Producto escalar de vector por un numero entero.
vector operator*(int);
//Producto escalar de un numero entero por vector.
friend vector operator *(int, vector);
//Producto escalar de dos vectores.
int operator * (vector);
//Producto vectorial de dos vectores.
vector operator ^ (vector);
//Para mostrar por pantalla un vector.
friend ostream& operator << (ostream& , vector);
//Para leer por teclado un vector.
friend istream& operator >> (istream& , vector&);
};
vector::vector (int i=0, int j=0, int k=0)
{
x = i;
y = j;
z = k;
}
vector vector::operator + (vector v)
{
return vector(x+v.x, y+v.y, z+v.z);
}
vector vector::operator - (vector v)
{
return vector(x-v.x, y-v.y, z-v.z);
}
vector vector::operator * (int i)
{
return vector(x*i, y*i, z*i);
}
/*PRODUCTO VECTORIAL DE DOS VECTORES?
vector vector::operator * (vector v)
{
return vector(a.v.y);
}*/
vector operator *(int i, vector v)
{
return (v*i);
}
int vector::operator * (vector v)
{
return x*v.x+y*v.y+z*v.z;
}
vector vector::operator ^ (vector v)
{
return vector(y*v.z-z*v.y, -(x*v.z-z*v.x), x*v.y-y*v.x);
}
ostream& operator << (ostream& o, vector v)
{
return o << v.x << "," << v.y << "," << v.z;
}
istream& operator >> (istream& i, vector &v)
{
cout << "Introduce X: ";
i >> v.x;
cout << "Introduce Y: ";
i >> v.y;
cout << "Introduce Z: ";
i >> v.z;
cout << endl;
return i;
}
void borrar()
{
system("cls");
}
int menu()
{
cout << "Menu:" << endl << "1. Visualizar los vectores introducidos" << endl;
cout << "2. Sumar los dos vectores" << endl << "3. Producto escalar de un vector por un entero" << endl;
cout << "4. Producto escalar de dos vectores" << endl << "5. Producto vectorial de dos vectores" << endl;
cout << "6. Salir del programa" << endl;
}
int main()
{
vector a,b;
int i,w;
system("color 3b");
cout << "Introduce el primer vector:" << endl;
cin >> a;
cout << "Introduce el segundo vector:" << endl;
cin >> b;
cout << "Introduce el numero entero:";
cin >> i;
borrar();
/*visualizarlo en pantalla, sumar dos vectores,
el producto escalar de un vector (x,y,z) por un entero, el producto escalar de dos vectores
y el producto vectorial de dos vectores.*/
do{
menu();
cin >> w; borrar();
switch(w)
{
case 1:
cout << "Los dos vectores introducidos son: " << endl;
cout << "Primer vector: "<< a << endl << "Segundo vector: " << b << endl << endl;
break;
case 2:
cout << "La suma de los son vectores es: " << a+b << endl << endl;
break;
case 3:
cout << "El producto escalar del primer vector por el entero es: " << a*i << endl;
cout << "El producto escalar del primer vector por el entero es: " << b*i << endl << endl;
break;
case 4:
cout << "El producto escalar de los dos vectores es: " << a*b << endl << endl;
break;
case 5:
cout "TEST: " << a;
break;
case 6:
return(0);
break;
};}while(w!=5);
//cout << endl << endl << "a + b = " << a+b << endl << endl << "b + a = " << b+a << endl << endl << "a - b = " << a-b << endl << endl << "b - a = " << b-a << endl << endl << "a * i = " << a*i << endl << endl << "i * a = " << i*a << endl << endl << "b * i = " << b*i << endl << endl << "i * b = " << i*b << endl << endl << "a · b = " << a*b << endl << endl << "b · a = " << b*a << endl << endl << "a x b = " << (a^b) << endl << endl << "b x a = " << (b^a) << endl;
system("Pause");
}