【发布时间】:2017-03-24 21:48:37
【问题描述】:
下面是程序,
#include<stddef.h>
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
#define INITIAL_ARRAY_SIZE 10
typedef struct{
int *a;
int lastItem; //Location of lastest element stored in array
int size; //Size of array
}List;
void newList(List **lptr, int size){
*lptr = malloc(sizeof(List));
(*lptr)->a = calloc(size, sizeof(int));
(*lptr)->lastItem = -1;
(*lpr)->size =0;
}
List* insertItem(List *lptr, int newItem){
if(lptr->lastItem + 1 == lptr->size){
List *newLptr = NULL;
newList(&newLptr, 2*lptr->size);
memcpy(newLptr->a, lptr->a, (lptr->lastItem)+1);
newLptr->lastItem = lptr->lastItem;
newLptr->size = 2*lptr->size;
newLptr->a[++(newLptr->lastItem)] = newItem;
free(lptr);
return newLptr;
}
lptr->a[++(lptr->lastItem)] = newItem;
return lptr;
}
int main(void){
List *lptr = NULL;
newList(&lptr, INITIAL_ARRAY_SIZE);
lptr = insertItem(lptr, 6);
for(int i=0; i < INITIAL_ARRAY_SIZE;i++){
printf("Item: %d\n", lptr->a[i]);
}
printf("last item value: %d", lptr->lastItem);
}
为使用 C 数组实现 List 而编写。
上面的代码是按照抽象写的。
在这段代码中如何保证封装性和多态性?
【问题讨论】:
-
多态性?我在这里没有看到...
-
您充其量只是在使用抽象原则。不过那里没有封装或多态性。
-
与您的问题无关,但您的
insertItem函数存在缺陷。首先,当您对指针执行sizeof时,您会得到 pointer 的大小,而不是它所指向的大小。其次,它不会建立。第三,您创建了一个全新的列表结构,当函数返回时您将“忘记”它。关于realloc函数,您可能想阅读的最后一件事。该功能还存在一些其他问题。 -
老实说,下面的答案比我能提供的任何答案都好。我也会仔细研究它。
标签: c oop polymorphism abstraction