2013-12-11 3 views
1

이 주 프로그램은 사용자에게 숫자를 입력하고 동적 배열에 저장하도록 요청해야합니다. 그 배열은 쉼표를 사이에두고 끝선 명령이없는 직선으로 그 내용을 출력해야합니다. 나는 프로그램을 시작하는 방법을 알아낼 수 없다.추상 클래스 출력 문제

내가이 일을 할 수있는 방법을 찾도록 도울 수 있다면, 나는 영원히 감사 할 것입니다!

#ifndef LISTTYPE_H_INCLUDED 
#define LISTTYPE_H_INCLUDED 
#include <iostream> 

class ListType { 
public: 
ListType(size_t=10); 
virtual ~ListType(); 
virtual bool insert(int)=0; 
virtual bool erase(); 
virtual bool erase(int)=0; 
virtual bool find(int) const=0; 
size_t size() const; 
bool empty() const; 
bool full() const; 
void output(std::ostream& out) const; 
friend std::ostream& operator << (std::ostream&, const ListType&); 
protected: 
int *items; 
size_t capacity; 
size_t count; 
}; 

#endif // LISTTYPE_H_INCLUDED 
여기

이다 UListType.h :

#ifndef OLISTTYPE_H_INCLUDED 
#define OLISTTYPE_H_INCLUDED 
#include <iostream> 

class OListType: public ListType { 
public: 
OListType(size_t=10); 
bool insert(int); 
bool erase(int); 
bool find(int) const; 
}; 


#endif // OLISTTYPE_H_INCLUDED 
여기

ListType.cpp이다 : 여기

#ifndef ULISTTYPE_H_INCLUDED 
#define ULISTTYPE_H_INCLUDED 
#include <iostream> 

class UListType: public ListType { 
public: 
UListType(size_t=10); 
bool insert(int); 
bool erase(int); 
bool find(int) const; 
}; 


#endif // ULISTTYPE_H_INCLUDED 

가 OListType.h이며 여기

는 ListType.h이다

#include "ListType.h" 

ListType::ListType (size_t a) { 
capacity = a; 
count = 0; 
items = new int [capacity]; 
} 

ListType::~ListType() { 
delete [] items; 
} 

bool ListType::erase() { 
count = 0; 
return 0; 
} 

size_t ListType::size() const { 
return (count); 
} 

bool ListType::empty() const { 
return (count == 0); 
} 

bool ListType::full() const { 
return (count == capacity); 
} 

void ListType::output(std::ostream& out) const { 
for (int i = 0; i < count; i++) { 
     if (i > 0) { 
     out << ", "; 
     } 
     out << items[i]; 
} 
} 

std::ostream& operator << (std::ostream& out, const ListType& my_list) { 
my_list.output(out); 
    return out; 
} 

여기 OListType.cpp

#include "ListType.h" 
#include "OListType.h" 

OListType::OListType(size_t c): ListType(c) {} 

bool OListType::insert(int item) { 
size_t i = count; 
if (full()) { 
    int *newitems; 
    capacity *=2; 
    newitems = new int[capacity]; 
    while (i > 0 && items[i-1] > item){ 
     newitems[i] = items[i]; 
    } 
    delete [] items; 
    items = newitems; 
} 
items[count++] = item; 
return true; 
} 

bool OListType::erase(int item) { 
bool found=false; 
size_t i=0, j= count-1, mid; 
while (i <= j && !(found)){ 
    mid = (i + j)/2; 
    if (item < items [mid]) 
     j = mid - 1; 
    else if (item > items [mid]) 
     i = mid + 1; 
    found = items [mid] == item; 
} 
if (found) { 
    for (i = mid; i < count - 1; ++i) { 
     items [i] = items [i +1]; 
    } 
    --count; 
} 
return found; 
} 

bool OListType::find (int item) const { 
bool found=false; 
size_t i=0, j= count-1, mid; 
while (i <= j && !(found)){ 
    mid = (i + j)/2; 
    if (item < items [mid]) 
     j = mid - 1; 
    else if (item > items [mid]) 
     i = mid + 1; 
    found = items [mid] == item; 
} 
return found; 
} 
+0

'int main (void) {'? 그것은 보통 나를위한 최고의 시작 장소입니다. –

+0

int main()을 사용하여 시작하는 것으로 알고 있지만 int main (void)은 무엇을합니까? – RyuKaze78

+0

'void '는 프로그램이 운영체제의 명령 행 인자를 기대하지 않는다는 것을 컴파일러에게 알려줍니다. –

답변

0
#include "ListType.h" 
#include "UListType.h" 

#include <iostream> 
using std::cout; 
using std::endl; 
using std::cin; 

int main() 
{ 
    UListType UL; 

    cout << "How many numbers do you want to put it?" << endl; 
    int n; 
    cin >> n; 
    cout << "All right, enter " << n << " numbers:" << endl; 
    int x; 
    for(int k=0; k<n; ++k) 
    { 
    cin >> x; 
    // do something with x 
    } 
    return(0); 
} 
0

당신은 이미 당신이 필요로하는 모든 것을 가지고 여기

#include "ListType.h" 
#include "UListType.h" 

UListType::UListType (size_t c): ListType(c) {} 

bool UListType::insert(int item) { 
if (full()) { 
    int *newitems; 
    capacity *=2; 
    newitems = new int[capacity]; 
    for (size_t i =0; i < count; ++i){ 
     newitems[i] = items[i]; 
    } 
    delete [] items; 
    items = newitems; 
} 
items[count++] = item; 
return true; 
} 

bool UListType::erase(int item) { 
bool result = false; 
size_t i=0; 
while (i < count && items [i] != item) { 
    ++i; 
} 
if (i < count) { 
    items[i] = items[-- count]; 
    result = true; 
} 
return result; 
} 

bool UListType::find(int item) const { 
size_t i = 0; 
while (i < count && items [i] != item) { 
    ++i; 
} 
return i; 
} 

UListType.cpp

입니다. 다음을 시도하십시오

#include <iostream> 
#include "OListType.h" 

using namespace std; 
int main() 
{ 
    OListType list; 
    int n; 
    do 
    { 
     cout << "Add a number [Y/n]?"; 
     char a; 
     cin >> a; 
     if (a != 'n') 
     { 
      cin >> n; 
      list.insert(n); 
     } 
     else 
     { 
      list.output(cout); 
      break; 
     } 
    }while (1); 

    return 0; 
} 
+0

do while while do while loop? – RyuKaze78

+1

@ ldicus34 : 그것은 '중단'이하는 일입니다. – Beta

+0

예. 너 해봤 니? 모든게 괜찮 았어? – felknight