Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 31, средняя оценка - 4.97
OVERPOWER8
19 / 19 / 1
Регистрация: 29.11.2009
Сообщений: 224
#1

Как обратиться к методу класса из внешней функции? - C++

20.12.2009, 15:29. Просмотров 4420. Ответов 21
Метки нет (Все метки)

Имеется простой класс Employee с методами GetAge() - возвращает возраст, и SetAge(int age).
Как сделать так, чтобы работали функции DoShowInfo() и DoChangeAge(int age)

Например, вот класс:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Employee
{
    private:
        int *age;
    public:
        Employee();     ~Employee();
        
        void SetAge(int NewAge) { *age = NewAge; }
        void GetAge() const     { return *age; }
}
 
Employee::Employee()        {   age = new int(27);  }
 
Employee::~Employee()       {   delete age;     }
функции:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void DoShowInfo(Employee name)
{
    name->GetAge();
}
 
void DoChangeAge(Employee name, int NewAge)
{
    name->SetAge(NewAge)
}
 
int main()
{
    Employee* Alexander = new Employee();
    ...
    DoChangeAge(Alexander, NewAge);
    DoShowInfo(Alexander);
    ...
    delete Elexander; Alexander = 0;
    ...
}
Подскажите, как сделать так, чтобы эти функции заработали?

DoChangeAge(Alexander, NewAge);
DoShowInfo(Alexander);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.12.2009, 15:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как обратиться к методу класса из внешней функции? (C++):

Как обратиться к функции динамически созданного компонента? - C++ Builder
Динамически создаю кнопку: TButton *button = new TButton(this); button->Parent = this; button->Name = "but1"; ...

Как обратиться к переменной, объявленной внутри функции? - C++ Builder
Есть вот такой код: void __fastcall TForm1::FormCreate(TObject *Sender) { ...

Обратиться к элементам класса в методе ButtonClick - C++ Builder
Здравствуйте. Есть класс class Elem{ public: int a; }; и метод void __fastcall TForm1::Button1Click(TObject *Sender) Мне...

Переменные из функции класса в функцию другого класса - C++ Builder
Подскажи пожалуйста,как с класса Convector передать в класс Filter одержанный Bitmap и переменные? Convector::Convector() { ...

Обратиться к CDocument из дочернего класса - Visual C++
Где лучше создавать дочерние окна, производные от CView ? Пробовал в WM_CREATE, но тогда не получается из них обратиться к CDocument: ...

Из подключенного класса обратиться к форме. - Visual C++
Здравствуйте! Пишу на MS Visual C++ 2008 Express. Я подключил свой класс к программе отдельным файлом и теперь мне надо, чтобы по ходу...

21
OVERPOWER8
19 / 19 / 1
Регистрация: 29.11.2009
Сообщений: 224
20.12.2009, 17:27  [ТС] #16
>> outoftime
Спасибо, буду иметь в виду.

>> CyBOSSeR
Да, попробовал, но такие программы мне не нужны.
0
CyBOSSeR
Эксперт С++
2306 / 1676 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
20.12.2009, 17:30 #17
Не используй указатели только потому что их можно использовать. Использовать указатели нужно только тогда когда это действительно необходимо и без них никак.
OVERPOWER8, это не единственная проблема. С указателями ты можешь огрести по полной.
Так все же почему ты используешь указатель на int для хранения возраста?
0
OVERPOWER8
19 / 19 / 1
Регистрация: 29.11.2009
Сообщений: 224
20.12.2009, 17:39  [ТС] #18
>> CyBOSSeR
У меня не только указатель для хранения возраста:

C++
1
2
3
int* age;
int* YearsOfService;
int* Salary;
Потому что в таком случае гораздо удобнее будет манипулировать значениями этих характеристик класса.
0
CyBOSSeR
Эксперт С++
2306 / 1676 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
20.12.2009, 17:46 #19
Цитата Сообщение от OVERPOWER8 Посмотреть сообщение
Потому что в таком случае гораздо удобнее будет манипулировать значениями этих характеристик класса.
Поподробнее можешь объяснить, просто мне не очень понятно, чем манипуляция указателями может быть удобнее? Ведь при любом копировании, присваивании двух экземпляров Employee, они в таком случае будут разделать все члены-данные, которые являются указателями. Т.е.
C++
1
2
3
4
5
6
7
Employee employee;
 
employee.SetAge(20); // employee.age == 20
 
Employee employee2 = employee; // employee.age == 20, employee2.age == 20
 
employee2.SetAge(10); // employee.age == 10, employee2.age == 10
Ели ты конечно, не определишь конструктор копирования, и не перегрузишь оператор присваивания.
1
OVERPOWER8
19 / 19 / 1
Регистрация: 29.11.2009
Сообщений: 224
20.12.2009, 17:54  [ТС] #20
>> CyBOSSeR
Ладно, твоя взяла.

Просто делаю так, как МНЕ УДОБНО!, больше ничего не буду разъяснять.
0
CyBOSSeR
Эксперт С++
2306 / 1676 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
20.12.2009, 20:14 #21
Цитата Сообщение от OVERPOWER8 Посмотреть сообщение
Просто делаю так, как МНЕ УДОБНО!, больше ничего не буду разъяснять.
Смотри сам, огребешь проблем с такими удобствами.
0
outoftime
║XLR8║
511 / 433 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
09.02.2014, 02:41 #22
OVERPOWER8, http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml делайте лучше так как другим удобно, ибо писать нечитаемый код ... лучше вообще не писать.
0
09.02.2014, 02:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.02.2014, 02:41
Привет! Вот еще темы с ответами:

Конфликт вызванный перехватом API-функции по методу code injection - Visual C++
У меня есть приложение написанное на MS Visual C++ 6. У одного из клиентов (японская WinXP) оно падает сразу после запуска. Изучение crash...

Как из DLL, в котором есть только DllGetClassObject, обратиться к методу, который должен быть в этой DLL? - C++ WinAPI
Есть метод ITaskbarList3::SetProgressState, он предназначен для того, чтобы в значке программы рисовать прогресс, как например хром рисует,...

Обратиться к конструктору дочернего класса в интерфейсе родительского - C++ WinAPI
Есть заголовочный файл FirstDlg.h с интерфейсом класса FirstDlg унаследованного от CDialog; Хочу в интерфейсе класса(заголовочном файле)...

WM_PAINT из внешней функции - C++ WinAPI
как поставить в очередь WM_PAINT из функции вне функции обратного вызова Добавлено через 5 минут делаю так не выходит ...


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

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Опции темы

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