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

Конструктор копирования в Visual Studio 2012 - C++

Восстановить пароль Регистрация
 
tramp_1-3
 Аватар для tramp_1-3
14 / 14 / 1
Регистрация: 13.10.2012
Сообщений: 428
04.04.2013, 15:07     Конструктор копирования в Visual Studio 2012 #1
По идее это должен выполнять конструктор копирования. В мэине String rgb [0] = s1; работает,
а String rgb [0] = String (s1); уже нет.
хэдэр
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
#ifndef STRING1_H_
#define STRING1_H_
#include <iostream>
class String {
    private:
                char    *   str;
                int         len;
        static  int         num_strings;
        //ввод границы cin
        static  const   int         CINLIM      = 80;
    public:
        //конструкторы и другие методы
                String                  (const char *);
                String                  ();
                String                  (const String &);
                String                  (String &);
                ~String                 ();
                int         lenght      () const    {return len;};
        //перегруженные методы оператора
                String  &   operator=   (const String  &);
                String  &   operator=   (const char *);
                char    &   operator[]  (int);
        const   char    &   operator[]  (int)       const;
                String      operator+   (const String &) const;
        //перегруженные дружественные операторы
        friend  bool                operator<   (const String &,       const String &);
        friend  bool                operator>   (const String &,       const String &);
        friend  bool                operator==  (const String &,       const String &);
        friend  std::ostream    &   operator<<  (std::ostream &, const String &);
        friend  std::istream    &   operator>>  (std::istream &,       String &);
        friend String  operator + (const char *, const String &);
        //friend bool strcpm (const char * n, const char * m);
        //статические функции
        static  int HowMany ();
        void StringLow ();
        void StringUp ();
        int CharQuantity (char);
};
#endif
методы
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include <cstring>
#include "string1.h"
//инициализация статического элемента
int String  ::  num_strings = 0;
int String  ::  HowMany     ()  {
    return num_strings;
};
// методы класса
String :: String (const char * s) { //создание объекта String из строки
    len = strlen (s);   //установка размера
    str = new char [len +1];    //разпределение памяти
    strcpy  (str, s);           //инициализация указателя
    num_strings++;          //установка счетчика объекта
};
String :: String () {       //конструктор по умолчанию
    len = 1;
    str = new char [1];
    str [0] = '\0';     //строка по умолчанию
    num_strings++;
};
String :: String ( const String & st) {
    num_strings++;
    delete [] str;
    len = st.len;
    str = new char [len + 1];
    strcpy (str, st.str);       //копирование строки в новое место
};
String :: String (String & st) {
    num_strings++;
    delete [] str;
    len = st.len;
    str = new char [len + 1];
    strcpy (str, st.str);       //копирование строки в новое место
};
String :: ~String () {          //необходимый деструктор
    --num_strings;           //необходимо
    delete [] str;          //необходимо
};
//перегруженные методы оператора
//присваивание объекта string объекту string
String & String :: operator= (const String &  st) {
    if (this == &st)
        return *this;
    delete [] str;
    len = st.len;
    str = new char [len + 1];
    strcpy (str, st.str);
    return *this;
};
//присваивание строки объекту string
String & String :: operator= (const char * s){
    delete [] str;
    len = strlen (s);
    str = new char [len + 1];
    strcpy (str, s);
    return *this;
};
//доступ чтения-записи char для объекта не-const  String
char & String :: operator[] (int i) {
    return str [i];
};
//доступ чтения char для объекта string
const char & String :: operator[] (int i) const {
    return str [i];
};
String  String::operator+ (const String & vary) const {
    char * temp = new char [len + vary.len];
    return String (strcat (strcpy (temp, str), vary.str));
};
String  operator+ (const char * str, const String & vary) {
    char * temp = new char [strlen (str) + vary.len];
    return String (strcat (strcpy (temp, str), vary.str));
};
//перегруженные дружественные операторы
bool operator< (const String & st1, const String & st2) {
    return (strcmp  (st1.str, st2.str) < 0);
};
bool operator> (const String & st1, const String & st2) {
    return (st2.str < st1.str);
};
bool operator== (const String & st1, const String & st2) {
    return (strcmp  (st1.str, st2.str) > 0);
};
//вывод String
std::ostream & operator<< (std::ostream & os, const String & st) {
    os << st.str;
    return os;
};
//быстрый ввод String/
std::istream & operator>> (std::istream & is,  String & st) {
    char temp [String::CINLIM];
    is.get (temp, String::CINLIM);
    if (is)
        st = temp;
    while (is && is.get () != '\n')
        continue;
    return is;
};
void String::StringLow () {
    for (int i = 0; i < len; i++)
        str [i] = tolower (str [i]);
};
void String::StringUp () {
    for (int i = 0; i < len; i++)
        str [i] = toupper (str [i]);
};
int String::CharQuantity (char l) {
    int quantity = 0;
    for (int i = 0; i < len; i++)
        if (str [i] == l)
            quantity++;
    return quantity;
};
мэин
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
#include "string1.h"
int main () {
    using std::cout;
    using std::cin;
    String s1 (" and I am C++ student.");
    String s2 = "Please enter your name: ";
    String s3;
    cout << s2;
    cin >> s3;
    s2 = "My name is " + s3;
    cout << s2 << ".\n";
    s2 = s2 + s1;
    s2.StringUp ();
    cout << "The string\n" << s2 << "\ncontains " << s2.CharQuantity ('A') << " A characters in it.\n";
    s1 = "red";
    String rgb [3] = { String (s1), String ("green"), String ("blue") }; //дебаг указывает на эту строку, как на косячную
    cout << "Enter the name of a primary color for mixing light: ";
    String ans;
    bool success = false;
    while (cin >> ans) {
        ans.StringLow ();
        for (int  i = 0; i < 3; i++)
            if (ans == rgb [i]) {
                cout << "That's right!\n";
                success = true;
                break;
            };
        if (success)
            break;
        else
            cout << "Try again!\n";
    };
    cout << "Bye!\n";
    system ("pause");
    return 0;
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.04.2013, 15:07     Конструктор копирования в Visual Studio 2012
Посмотрите здесь:

Конструктор классов, Visual Studio 2008 C++
C++ Долгая компиляция MS Visual Studio 2012
C++ Переход на Visual Studio 2012
C++ Visual Studio 2012 Ultimate Русская
C++ Настройка SDL в Visual Studio 2012
Visual Studio 2012 на x64 C++
Конструктор в Visual Studio 2013 C++
C++ Где взять visual studio 2012?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 09:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru