Problemazo con ejercicio de C++ T_T"

SikorZ

#30 Ahora mismo estoy dando Java, es que nunca lo habia escuchado xD, quizas sepa que es pero no sepa ese termino=S

1 respuesta
BLZKZ

#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

1 respuesta
Ulmo

accedentes y mutadores se puede decir en español.

Primera vez en mi vida q lo escucho y esta verano acabo la carrera xDDD

elkaoD

#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.

JuAn4k4

#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();

}

}
2 respuestas
BLZKZ

#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.

1 respuesta
JuAn4k4

#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.

1 respuesta
BLZKZ

#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

1 respuesta
JuAn4k4

#38 Imagino que sera para que lo sobre-escribas, y que el virtual de la clase principal es la implementacion por defecto. ¿ no ?

BLZKZ

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

1 respuesta
LOc0

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 ;)

1 respuesta
JuAn4k4

Ah no #40 , si virtual es para eso, entonces es abstract lo que hay que poner. ¿no? esque no se para que es lo de virtual, lo lei por encima.

#41 en c++ se podia hacer algo asi:

v1 + v2 = prodEscalar
v1 * v2 = prodVectorial

¿ es a lo que te refieres ?

Esto: http://yosefk.com/c++fqa/operator.html

1 respuesta
LOc0

#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 ;)

SikorZ

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"); }