Форум программистов, компьютерный форум CyberForum.ru

Класс "вектор" с конструкторами, позволяющими создать нулевой вектор и вектор с произвольным числом элементов - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Не удаляются символы http://www.cyberforum.ru/cpp-beginners/thread1112383.html
Сорри за глупый вопрос, короче в си++ работал с кодом в режиме отладки, нажал случайно какие-то клавиши, может из F, короче теперь открываю любой проект или создаю новый, ничего не удаляется, хотя добавлять символы можно. Tools - Import and Export settings - Reset all settings не помогает! Гугл не дал результатов. Нет идей больше, что делать? Переустанавливать студию?
C++ Указатели и двусвязные списки Уважаемые форумчане! Учусь по книжке Страструпа для начинающих. Вот пример кода: #include <iostream> #include "1.h" using namespace std; int main() { Link* norse_gods = new Link("Thor", 0, 0); http://www.cyberforum.ru/cpp-beginners/thread1112382.html
C++ Текстовой файл с уже введенным текстом зашифровать и вывести уже зашифрованный
Здравствуйте.Задание -шифр Виженера. Вроде код написал,но есть ошибки.Задание заключается в том,чтобы текстовой файл с уже введенным текстом зашифровать и вывести уже зашифрованный текст в другой текстовой файл,но ключ для шифровки вводится с консоли.Вот в начале я ввожу ключ,затем описываю переменные типа fstream для записи и использования текстовых файлов.Ну и затем сама шифровка.Как я...
C++ Как назвать элемент масива структур
Есть вот такая вот часть кода: player players = { {"ukraine", "pl", "loshkov_genadi_yurivich", 2, 19, 186, 81}, {"russia", "kp", "kachan_lidia_vladislavovna", 7, 20, 168, 52}, {"ukraine", "ta", "tarasov_genadi_yurivich", 9, 18, 190, 91} }; Как назвать элемент массива структур: {"ukraine", "pl", "loshkov_genadi_yurivich", 2, 19, 186, 81} это элемент массива, как его...
C++ Квадратная матрица A называется ортогональной, если AT=A-1 http://www.cyberforum.ru/cpp-beginners/thread1112356.html
Квадратная матрица A называется ортогональной, если A^T=A^-1. Определить, является ли заданная матрица A(n,n) ортогональной.
C++ Непонятный синтаксис, указатели, типы, ссылки В фрагменте программы, которая разбивает большое HEX число на части: unsigned __int8 *ptr8; __int32 a; Edit1->Text=("0x"+IntToHex(0x23DA6FEC,8)); a = StrToInt(Edit1->Text); ptr8=(__int8*)&a; Edit6->Text="0x"+IntToHex(*ptr8,2); Edit5->Text="0x"+IntToHex(*(1+ptr8),2); Edit4->Text="0x"+IntToHex(*(2+ptr8),2); подробнее

Показать сообщение отдельно
__sirroko
4 / 4 / 3
Регистрация: 03.03.2013
Сообщений: 55
06.03.2014, 00:13     Класс "вектор" с конструкторами, позволяющими создать нулевой вектор и вектор с произвольным числом элементов
Привет!

Задача следующая.
Нужно реализовать класс "вектор" с конструкторами, которые позволяют создать нулевой вектор и вектор с произвольным кол-во элементов. И требуется перегрузить ряд операций.

Пока что перегружены [], =, +. Но где-то ошибка и я не понимаю где.

При варианте
C++
1
CVector v3 = v2;
ошибок нет, а, если так сделать
C++
1
CVector v3 = v2 + v1;
компилятор начинает ругаться.

Вот код и вывод комплятора =)

main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include "CVector.h"
 
#include <iostream>
using namespace std;
 
#define N 10
 
void PrintVector(char *str, CVector &obj)
{
    cout << str << " :: ";
    for (int i = 0; i < obj.GetSize(); i++)
        cout << obj[i] << " ";
    cout << endl;
}
 
int main(int argc, char *argv[])
{
    int *a = new int[N];
 
    for (int i = 0; i < N; i++)
        a[i] = i*11;
 
    CVector v1(N, a);
    PrintVector("v1", v1);
 
    CVector v2(v1);
    PrintVector("v2", v2);
 
    CVector v3 = v1 + v2;
    PrintVector("v3 = v1 + v2", v3);
 
    return 0;
}
CVector.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include "CVector.h"
 
#include <iostream>
#include <cstdlib>
using namespace std;
 
CVector::CVector(int s, int *arg)
{
    if (s <= 0) {
        cout << "Размерность вектора указана неправильно!\n";
        return;
    }
 
    size = s;
    p_vector = new int[s];
 
    for (int i = 0; i < size; i++)
        p_vector[i] = arg[i];
}
 
CVector::CVector(CVector &obj)
{
    size = obj.size;
    p_vector = new int[obj.size];
 
    for (int i = 0; i < size; i++)
        p_vector[i] = obj.p_vector[i];
}
 
void CVector::InitVector(int s, int *arg)
{
    if (p_vector) delete [] p_vector;
 
    size = s;
    p_vector = new int[s];
 
    for (int i = 0; i < size; i++)
        p_vector[i] = arg[i];
}
 
int &CVector::operator[](int i)
{
    if (i < 0 || i > (size - 1)) {
        cout << "Неверный индекс.\n";
        exit(1);
    }
 
    return p_vector[i];
}
 
CVector CVector::operator=(CVector obj)
{
    // Если размеры векторов не совпадают, то
    // выделяется память нужного размера
    if (size != obj.size) {
        delete [] p_vector;
        p_vector = new int[obj.size];
        size = obj.size;
    }
 
    for (int i = 0; i < size; i++)
        p_vector[i] = obj.p_vector[i];
 
    return *this;        
}
 
CVector CVector::operator+(CVector obj)
{
    CVector tmp = *this;
 
    if (tmp.size == obj.size) {
        for (int i = 0; i < tmp.size; i++)
            tmp.p_vector[i] += obj.p_vector[i];
    } else {
        cout << "Вектора разной размерности." << endl;
        exit(1);
    }
 
    return tmp;
}
CVector.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class CVector
{
    int *p_vector;
    int size;
 
public:
    CVector() { size = 0; p_vector = 0; }
    CVector(int s, int *arg);
    CVector(CVector &obj);
    ~CVector() { if (p_vector) delete [] p_vector; }
 
    void InitVector(int s, int *arg);
    int GetSize() { return size; }
 
    int &operator[](int i);
    CVector operator=(CVector obj);
    CVector operator+(CVector obj);
};
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
main.cpp: In function ‘int main(int, char**)’:
main.cpp:24:25: warning: deprecated conversion from string constant to ‘char*[-Wwrite-strings]
     PrintVector("v1", v1);
                         ^
main.cpp:27:25: warning: deprecated conversion from string constant to ‘char*[-Wwrite-strings]
     PrintVector("v2", v2);
                         ^
main.cpp:29:23: error: no matching function for call to ‘CVector::CVector(CVector)’
     CVector v3 = v1 + v2;
                       ^
main.cpp:29:23: note: candidates are:
In file included from main.cpp:1:0:
CVector.h:9:5: note: CVector::CVector(CVector&)
     CVector(CVector &obj);
     ^
CVector.h:9:5: note:   no known conversion for argument 1 from ‘CVector’ to ‘CVector&’
CVector.h:8:5: note: CVector::CVector(int, int*)
     CVector(int s, int *arg);
     ^
CVector.h:8:5: note:   candidate expects 2 arguments, 1 provided
CVector.h:7:5: note: CVector::CVector()
     CVector() { size = 0; p_vector = 0; }
     ^
CVector.h:7:5: note:   candidate expects 0 arguments, 1 provided
main.cpp:30:35: warning: deprecated conversion from string constant to ‘char*[-Wwrite-strings]
     PrintVector("v3 = v1 + v2", v3);
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 14:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru