Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2011, 20:14   #1
Xanex
Пользователь
 
Регистрация: 08.12.2008
Сообщений: 22
По умолчанию Передача char* в метод

Собственно проблема такая, ниже приведен код

Код:
My_CClass st1;
	My_CClass st2;
	char name[256];
	int year = 0;
        

	cin>>name;
	cin>>year;

	st1.SetName(name);
	st1.SetYear(year);

  
	cin>>name;
	cin>>year;

	st2.SetName(name);
	st2.SetYear(year);
Необходимо для st1 st2 установить свои значения, ясное дело, что при вводе с клавиатуры использовать одну какую-то временную переменную(как name). Вот только когда отработает эта строка

Код:
st2.SetName(name);
то у объектов st1 st2 поле name будет иметь одинаковое значение, т.е в методе класса

Код:
void My_CClass::SetName(char* name)
{
	this->name  = name;
}
this->name присваивается не значение, а к сожалению указатель на область памяти (. Если честно, то давненько на плюсах программил, подзабыл что такое указатели как с ними работать. Вроде проблема пустяковая, но из-за нее не работает ничего. Помогите, пожалуйста )
Xanex вне форума Ответить с цитированием
Старый 25.03.2011, 20:26   #2
Alt
Лжец и смутьян
Форумчанин
 
Аватар для Alt
 
Регистрация: 03.04.2009
Сообщений: 194
По умолчанию

strcpy(dest, source);
Помогли тебе - помоги другому.
Alt вне форума Ответить с цитированием
Старый 25.03.2011, 20:27   #3
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

strcpy(this->name,name);
вы значению this->name присваивали адрес name
onewho вне форума Ответить с цитированием
Старый 25.03.2011, 20:31   #4
Xanex
Пользователь
 
Регистрация: 08.12.2008
Сообщений: 22
По умолчанию

Цитата:
Сообщение от onewho Посмотреть сообщение
strcpy(this->name,name);
вы значению this->name присваивали адрес name
Я то это прекрасно понимаю, что присваивал адрес, поэтому и обратился сюда. А есть ли возможность не используя функцию strcpy как-то присвоить значение?
Xanex вне форума Ответить с цитированием
Старый 25.03.2011, 20:33   #5
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Ну, я бы сделал так...Весь код:
Код:
#include <iostream>
#include <stdio>

using namespace std;

class MyClass
{
   public:
     MyClass() {}
     void SetName(const char* xName)
     {
          this->name = xName;
     }
     void SetYear(int nYear)
     {
          this->Year = nYear;  
     }
    protected:
         string name;
         int Year;
};

int main()
{
    MyClass A;
    MyClass B;
    char name[256];
    cin.getline(name,256);
    A.SetName(name);
    cin.getline(name,256);
    B.SetName(name);
    int x;
    cin>>x;
    A.SetYear(x);
    cin>>x;
    B.SetYear(x);
    return 0;
}
Ну, вроде как-то так...
Хотя, конечно, я бы так не делал...
_-Re@l-_ вне форума Ответить с цитированием
Старый 25.03.2011, 20:37   #6
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

для каких целей поля protected?
Цитата:
А есть ли возможность не используя функцию strcpy как-то присвоить значение?
ну в цикле можно
Код:
char *p1=str1;
char *p2=str2;
while((*p2++)=(*p1++));
как-то так.
правда это тот же самый strcpy и будет

Последний раз редактировалось onewho; 25.03.2011 в 20:44.
onewho вне форума Ответить с цитированием
Старый 25.03.2011, 20:39   #7
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Да. Чем они вам не угодили? Protected нужно для того, чтобы защитить поля от несанкционированного воздействия.
_-Re@l-_ вне форума Ответить с цитированием
Старый 25.03.2011, 20:51   #8
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

Угодили) только почему не private?
onewho вне форума Ответить с цитированием
Старый 25.03.2011, 21:04   #9
Xanex
Пользователь
 
Регистрация: 08.12.2008
Сообщений: 22
По умолчанию

Цитата:
Сообщение от onewho Посмотреть сообщение
Угодили) только почему не private?
private поля при наследовании не видны, protected видны )
Xanex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
передача данных в метод C# PUSHkiN Помощь студентам 4 17.08.2010 11:59
Передача массива в метод Sempe4 Общие вопросы .NET 6 16.06.2010 17:25
Передача двумерного динамического массива в метод Дырдин Общие вопросы C/C++ 1 19.03.2010 09:45
передача информации. метод post NSvirus PHP 2 27.10.2009 13:57
Передача метода класса в качестве параметра в другой метод Dmytry87 Общие вопросы C/C++ 0 12.11.2008 15:28