2015-08-22 1 views
0

Мне нужно добавить конструктор, который принимает аргумент int, sz и массив символов размером sz. Затем мне нужен конструктор, чтобы установить первые sz членов массива частных данных arr в sz членов массива аргументов char.присвоить массив частных данных массиву перегрузки массива []

Вот что у меня есть до сих пор; Я не уверен, как вызвать объект (т. Е. CharPair (arr[ ], 10). Я попытался построить как CharPair(char takearr[], int sz);, правильно? Если правильно, какой результат должен быть? Я получаю AAAAAAAAA

#include <iostream> 
#include <cstdlib> 
using namespace std; 


class CharPair 
{ 
public: 
    CharPair(); 
    CharPair(int sz); 
    CharPair(char takearr[], int sz); 
    char& operator[](int index); 
    int getSize() const; 
private: 
    char arr[100]; 
    char size; 
}; 

int main() 
{ 
    char testarr[20] = "AAAAAAAAAAAAAAAAAAA"; 
    CharPair a ; 
    CharPair b (12) ; 
    CharPair c (testarr, 10) ; 
    //test data 
    a [ 1 ] = 'A' ; 
    a [ 2 ] = 'B' ; 
    cout << a [ 1 ] << endl ; 
    cout << a [ 2 ] << endl ; 
    for (int i = 0 ; i < 12 ; i++) 
     cout << b [ i ]; 
    cout << endl; 
    for (int i = 0 ; i < 10 ; i++) 
     cout << testarr [ i ]; 

    return 0; 
} 
char& CharPair::operator[](int index) 
{ 
    if (index >= size){ 
     cout << "Outta boundry" << endl; 
     exit(1); 
    } 
    return arr[index]; 
} 

CharPair::CharPair() : size(10) 
{ 
    for (int i = 0; i < size; i++) 
    { 
     arr[i] = '#'; 
    } 
} 

CharPair::CharPair(int sz) : size(sz) 
{ 
    if (sz >= 100){ 
     cout << "Outta boundry" << endl; 
     exit(1); 
    } 

    for (int i = 0; i < sz; i++) 
    { 
     arr[i] = '#'; 
    } 
} 
CharPair::CharPair(char takearr[], int sz) : size(sz) 
{ 
    if (sz >= 100){ 
     cout << "Outta boundry" << endl; 
     exit(1); 
    } 

    for (int i = 0; i < sz; i++) 
    { 
     takearr[i] = arr[i]; 
    } 
} 
int CharPair::getSize() const 
{ 
    return size; 
} 
+0

что вопрос именно? –

+0

Я отредактировал мой вопрос @AlexLop. – newbiecoder

ответ

0

Отнесение неправильно: вы присваиваете неинициализированные данные перезаписью хороший. Измените его на

CharPair::CharPair(char takearr[], int sz) : size(sz) 
{ 
    if (sz >= 100){ 
     cout << "Outta boundry" << endl; 
     exit(1); 
    } 

    for (int i = 0; i < sz; i++) 
    { 
     arr[i] = takearr[i]; // This is correct 
    } 
} 

Выходной сигнал будет затем

A 
B 
############ 
AAAAAAAAAA 
+0

частный массив данных arr для массива аргументов Ваше решение точно наоборот – newbiecoder

+0

Это решение верное. – Banex

Смежные вопросы