在这种情况下我需要使用指针吗?

时间:2018-03-23 09:43:43

标签: c++ class

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指针,还是可以使用堆栈对象?

2 个答案:

答案 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对象!