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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
velodro
72 / 1 / 1
Регистрация: 28.11.2009
Сообщений: 78
#1

почему не меняются элементы класса c++? - C++

19.12.2009, 00:01. Просмотров 510. Ответов 9
Метки нет (Все метки)

я подразумеваю - потому-что выдаваемое значение это указатель...
но тогда вопрос - а как сделать так, чтобы заработало?
вот программка...
класс описывает адрес; метод должен поменять strana на "*".
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
#include<iostream.h>
#include<string.h>
class pochta{
    int r;
public:
    int i;
    pochta();
    char* strana;
    char* gorod;
    char* yl;
    int dom;
    int index;
    char* ydal_s();
};
pochta::pochta(){
    r=10;
    strana=new char [r];
    gorod=new char [r];
    yl=new char [r];
    cout<<"Vvedite strany"<<endl;
    cin.getline(strana,r);
    cout<<"Vvedite gorod"<<endl;
    cin.getline(gorod,r);
    cout<<"Vvedite yl"<<endl;
    cin.getline(yl,r);
    cout<<"Vvedite dom"<<endl;
    cin>>dom;
    cout<<"Vvedite index"<<endl;
    cin>>index;
}
char* pochta::ydal_s(){
    for (i=0; i<r; i++)
        strana[i]='*';
    return strana;
}
int main(){
    pochta p;
    char v;
    cin>>v;
    cout<<endl;
    cout<<p.strana<<endl;
    switch (v){
        case '1' : p.ydal_s; break;
    }
    cout<<p.strana;
    cout<<"Vvedite to, chto vi hotite ydalit"<<endl;
    cout<<"1-strana"<<endl;
    cout<<"2-gorod"<<endl;
    cout<<"3-ylica"<<endl;
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2009, 00:01     почему не меняются элементы класса c++?
Посмотрите здесь:

Почему в массиве меняются значения? - C++
Добрый вечер. Сразу код. // ConsoleApplication1.cpp : Defines the entry point for the console application. // #include...

Стек элементы не меняются местами - C++
Задание найти макс элемент стека и поменять его местами с первым элементом стэка Кто-то помочь с переменой местами макс элемента и...

Написать программу в которой элементы і-го і j-го строк меняются местами - C++
Задание: написать программу в которой: 1) с клавиатуры задаем двумерный массив размером n*n; 2) проверяется правильность ввода массива;...

почему игнорируется метод класса - C++
#include &lt;iostream.h&gt; #include &lt;stdlib.h&gt; class Vect { private: double **p; double **p1; double **p2; int size1; int...

Деструктор уничтожает 3 объекта класса. Почему? - C++
Деструктор уничтожает 3 объекта класса. Не понимаю почему. У меня же 2 объекта используются V и V1. Знающие люди, объясните #include...

почему изменяется и первый экземпляр класса - C++
Почему значение a.m становится равным b.m? Как сделать так, чтобы массив word можно было использовать несколько раз? #include...

Почему не создается второй объект класса? - C++
#include &lt;string&gt; // Заголовочный файл students.h class students { public: students(std::string user_name, std::string...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
19.12.2009, 09:57     почему не меняются элементы класса c++? #2
Цитата Сообщение от velodro Посмотреть сообщение
case '1' : p.ydal_s; break;
Что-бы вызвать функцию класса нужно писать:
C++
1
p.ydal_s();
Ну и кроме этого код требует доработки.
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
19.12.2009, 15:28     почему не меняются элементы класса c++? #3
velodro, тут прям сборка ошибок ООП) во первых в классах в основном поля делают закрытыми, чтобы иметь доступ только из методов класса , дружественных функций ( но эт не важно) , далее в конструкторе присваивать r какое то висячее 10 не айс, а потом ещё и выделять память под эти 10, корректнее было бы сделать конструктор инициализации хотя бы, использовать char* тут тоже не очень, лучше std::string ну и main() какой то не понятный.
velodro
72 / 1 / 1
Регистрация: 28.11.2009
Сообщений: 78
21.12.2009, 23:03  [ТС]     почему не меняются элементы класса c++? #4
я просто из своей проги куски вырезал, в мэйне не соблюдена последовательность... это я по невнимательности...
ну а свитч такой потому что остальные методы я убрал, для ясности ...

поменял по просьбам трудящихся... ну и всё же вернёмся к нашим баранам: почему не пашет

Добавлено через 47 минут
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
#include<iostream.h>
#include<string.h>
class pochta{
    int r;
public:
    int i;
    pochta();
    char* strana;
    char* ydal_s();
};
pochta::pochta(){
    r=10;
    strana=new char [r];
    gorod=new char [r];
    yl=new char [r];
    cout<<"Vvedite strany"<<endl;
    cin.getline(strana,r);
}
char* pochta::ydal_s(){
    for (i=0; i<r; i++)
        strana[i]='*';
    return strana;
}
int main(){
    pochta p;
    cout<<p.strana<<endl;
    p.ydal_s;
    cout<<p.strana;
    return 0;
}
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
22.12.2009, 06:01     почему не меняются элементы класса c++? #5
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
#include<iostream.h>
#include<string.h>
class pochta{
    int r;
public:
    int i;
    pochta();
    char* strana;
    char* ydal_s();
    char* gorod;
    char* yl;
};
pochta::pochta(){
    r=10;
    strana=new char [r];
    gorod=new char [r];// Г*ГіГ¦Г*Г® îáúÿâèòü Гў ГЄГ«Г*Г±Г±ГҐ
    yl=new char [r]; // Г*ГіГ¦Г*Г® îáúÿâèòü Гў ГЄГ«Г*Г±Г±ГҐ
    cout<<"Vvedite strany"<<endl;
    cin.getline(strana,r);
}
char* pochta::ydal_s(){
    for (i=0; i<(int)strlen(strana); i++)
        strana[i]='*';
    return strana;
}
int main(){
    pochta p;
    cout<<p.strana<<endl;
    p.ydal_s();// ГЇГЁГ±Г*Г« Г°Г*Г*ГҐГҐ ГЄГ*ГЄ âûçâГ*ГІГј ГґГіГ*êöèþ
    cout<<p.strana;
    return 0;
}
velodro
72 / 1 / 1
Регистрация: 28.11.2009
Сообщений: 78
22.12.2009, 11:24  [ТС]     почему не меняются элементы класса c++? #6
gorod и yl в прошлом не использовались... поэтому объявление в классе ни на что не повлияло...
с этим я разобрался.. а вот почему это не пашет...

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
#include<iostream.h>
#include<string.h>
class pochta{
    int r;
public:
    char c;
    int i;
    int v;
    pochta();
    char* strana;
    char* gorod;
    char* ydal();
};
pochta::pochta(){
    r=10;
    strana=new char [r];
    gorod=new char [r];
    cout<<"Vvedite strany"<<endl;
    cin.getline(strana,10);
    cout<<"Vvedite gorod"<<endl;
    cin.getline(gorod,r);
}
char* pochta::ydal(){
    switch (v){
        case '1' :
            for (i=0; i<r-1; i++)
                strana[i]='*';
            strana[r-1]='\0';
            return strana;
            break;
        case '2' : 
            for (i=0; i<r-1; i++)
                gorod[i]='*';
            gorod[r-1]='\0';
            return gorod;
            break;
        }
}
int main(){
    pochta p;
    cout<<p.strana<<endl;
    cout<<p.ydal()<<endl;
    return 0;
}
 
 
 при том что вот это работает:
 
 
 
#include<iostream.h>
#include<string.h>
class pochta{
int r;
public:
char c;
int i;
pochta();
char* strana;
char* ydal_s();
};
pochta::pochta(){
r=10;
strana=new char [r];
cout<<"Vvedite strany"<<endl;
cin.getline(strana,10);
}
char* pochta::ydal_s(){
for (i=0; i<r-1; i++)
strana[i]='*';
strana[r-1]='\0';
return strana;
}
int main(){
pochta p;
cout<<p.strana<<endl;
cout<<p.ydal_s()<<endl;
return 0;
}
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
22.12.2009, 11:53     почему не меняются элементы класса c++? #7
Я напишу про нерабочую версию:
Вот в этой строке (3-я снизу) идет вызов функции ydal()
C++
1
cout<<p.ydal()<<endl;
Смотрим теперь в этой функции что происходит:
C++
1
switch (v){
а чему равно v?
Мы эту переменную просто объявили как член класса и все, значений никаких не присваивали. Поэтому все case проскочили мимо и на выход.
velodro
72 / 1 / 1
Регистрация: 28.11.2009
Сообщений: 78
22.12.2009, 12:27  [ТС]     почему не меняются элементы класса c++? #8
забыл....
но если вставить cin>>v;
всё равно глючит....
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
22.12.2009, 12:37     почему не меняются элементы класса c++? #9
У Вас переменная v в классе описана как int. В функции ydal() идет ее сравнение с '1' и с '2' . Нужно переделать тогда так: или v описать в классе
C++
1
char v;
или убрать одинарные кавычки в case с цифр 1 и 2.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2009, 12:52     почему не меняются элементы класса c++?
Еще ссылки по теме:

Почему не выводятся данные родительского класса - C++
помогите с кодом не могу понять почему не выводит данные родительского класса при при вызове дочернего вот код тут все понятно...

Почему метод класса затирает статическое поле - C++
Добрый день :) Я учу самостоятельна с++. Сейчас разбираю тему классы. Вот у меня возник вопрос по коду: #include&lt;iostream&gt; using...

Почему выносят объявление класса в отдельный файл - C++
почему не правильно выносить классы Х файл, и рекомендуют в хереде объявления а в спп описание* чем плохо, если все будет в х файле?

Почему в C++ такая странная запись конструкторов класса? - C++
День добрый. Меня сбивают с толку некоторые особенности C++. Почему в C++ такая странная запись конструкторов класса? Одна запись вполне...

Почему есть доступ к закрытой переменной класса - C++
Привет. Я уже было находил ответ на свой вопрос, но забыл :( Вопрос такой: есть след. класс: class Test { public: void F(Test t) {...


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

Или воспользуйтесь поиском по форуму:
velodro
72 / 1 / 1
Регистрация: 28.11.2009
Сообщений: 78
22.12.2009, 12:52  [ТС]     почему не меняются элементы класса c++? #10
вот я лопух! спасибо огромное
Yandex
Объявления
22.12.2009, 12:52     почему не меняются элементы класса c++?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru