import java.util.*;
import java.io.*;
import java.io.Serializable;
public class Deserialization{
public static void main(String [] args) {
Student st1 = null;
Student st2 = null;
Student st3 = null;
String opcion=null;
Scanner lol=new Scanner (System.in);
try {
FileInputStream fileIn = new FileInputStream("input.ser");
ObjectInputStream in = new ObjectInputStream(fileIn);
st1 = (Student) in.readObject();
st2 = (Student) in.readObject();
st3 = (Student) in.readObject();
do{ //HERE IS WHEREI WANT TO ASK MY USER AND REALIZE IT
System.out.println("Want to change?\n");
opcion=lol.next();
lol.nextLine();
}while(opcion.equals("y")||opcion.equals("Y"));
in.close();
fileIn.close();
} catch (IOException i) {
i.printStackTrace();
return;
} catch (ClassNotFoundException c) {
System.out.println("Class not found");
c.printStackTrace();
return;
}
System.out.println("Deserialized File...");
System.out.println("Student 1");
System.out.println("Name: " +st1.name);
System.out.println("ID: " +st1.id);
System.out.println("Average: " +st1.average);
System.out.println("Student 2");
System.out.println("Name: " +st2.name);
System.out.println("ID: " +st2.id);
System.out.println("Average: " +st2.average);
System.out.println("Student 3");
System.out.println("Name: " +st3.name);
System.out.println("ID: " +st3.id);
System.out.println("Average: " +st3.average);
}
}
我是否需要在函数compareweight中使用Cat指针,还是可以使用堆栈对象?
答案 0 :(得分:5)
传递对象的最佳方法是使用const引用,如果你没有更改它们。这样可以避免复制(比如传递指针),但要确保你有一个项目以及不允许你修改对象。
bool Cat::compareWeight(const Cat& other)
是你理想的用途。
下一个最好的选择是指向const对象的指针
bool Cat::compareWeight(Cat const* other)
但是这更有可能导致传递无效对象的问题;因而不是首选。
答案 1 :(得分:0)
如果您使用
bool Cat::compareweight(Cat other)
你得到一个大多数不受欢迎的Cat对象副本。 所以你应该使用指针或引用。
bool Cat::compareweight(const Cat& other) const
{ return other.weight > weight ; }
bool Cat::compareweight(const Cat* other) const
{ return other->weight > weight; }
另外: 您应该将方法声明为const,因为方法不会更改对象的内容,您也可以使指针和引用为const,因为它们也不会更改与它们对应的对象。如果你不这样做,你就不能将你的方法用于它们的const对象!