Понимание направлений для программирования назначения? - PullRequest
1 голос
/ 09 апреля 2011

Нам дали задание в нашем классе программирования на C, чтобы изменить программу, чтобы она стала более объектно-ориентированной.Частично это было для исправления метода toString.Направления были:

 Modify the Student module to make it more object-oriented.

* Each Student object should have a function pointer that points to an 
  appropriate function for producing a string representation of the object.
* Provide a default toString method to each object when it is created. 
  The studentToString method should no longer be part of the Student interface 
  (as defined in Student.h)

Однако мы не совсем уверены, что это значит, и хотели бы знать, находим ли мы на правильном пути с тем, что мы должны делать.Вот код из файла Student.c:

 #include <stdio.h>
 #include <stdlib.h>
 #include "Student.h"
 #include "String.h"

 static void error(char *s) {
     fprintf(stderr, "%s:%d %s\n", __FILE__, __LINE__, s);
     exit(1);
 }

 extern Student newStudent(char *name, int age, char *major) {
     Student s;
     if (!(s = (Student) malloc(sizeof(*s))))
         error("out of memory");
     s->name = name;
     s->age = age;
     s->major = major;
     return s;
 }

 extern char *studentToString(Student s) {
     const int size = 3;
     char age[size + 1];
     snprintf(age, size, "%d", s->age);

     char *line = newString();
     line = catString(line, "<");
     line = catString(line, s->name);
     line = catString(line, " ");
     line = catString(line, age);
     line = catString(line, " ");
     line = catString(line, s->major);
     line = catString(line, ">");
     return line;
 }

Мы знаем, что метод * studentToString будет заменен методом * toString, и мы думаем, что метод * toString будет иметь то же содержимое, что и метод* Метод studentToString.Но мы не понимаем, как это делает его более объектно-ориентированным.Мы также определили, исходя из указаний, что при создании нового объекта Student у нас должен быть указатель в методе newStudent, который указывает на новый метод toString.

Мы не ищем, чтобы кто-либо делалпрограмма для нас.Мы просто хотим понять, что мы должны делать, поскольку нашего профессора не было в городе неделю.Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

0 голосов
/ 09 апреля 2011

Я предполагаю, что вам нужно добавить член в структуру Student, тип этого члена будет указателем на функцию.

Затем определите эту функцию.

Затем добавьте параметр с указателем на функцию newStudent.

Затем установите для этого вновь созданного члена значение параметра.

(это похоже на очень абстрактный способ изучения ОО, но это только мое мнение)

0 голосов
/ 09 апреля 2011

Похоже, ваш проф поставил вам эту проблему, чтобы вы поняли полиморфизм . В этом примере идея заключается в том, что каждый объект в вашей системе должен иметь свой собственный способ визуализации себя в виде строки, но вы не хотите знать детали; вы просто хотите иметь возможность вызывать toString для любого объекта.

* 1006 Е.Г. *

banana->toString()
apple->toString()
0 голосов
/ 09 апреля 2011

Звучит так, будто он просит вас взять структуру Student и добавить указатель на функцию внутри самой структуры, чтобы при наличии действительного указателя на структуру Student вы могли сделать что-то вроде

`myStudent->toString();`

и он возвращает то же значение, которое *

`studentToString(myStudent)`

имел бы раньше.Это делает его более объектно-ориентированным из-за того, что вы вызываете метод toString в эффективном «экземпляре» (из-за отсутствия лучших терминов) структуры Student и возвращаете параметры, связанные с этим «экземпляром».Точно так же, как и в каком-то объектно-ориентированном языке программирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...