Другие языки программирования и технологии
c++: можно ли передать в класс адрес, описанного в нём элемента данных?
т.е. класс уже есть, возможно ли его видоизменить. Есть ли другие варианты
Класс - это абстракция - тип данных. В него никто ничего передать не сможет.
Чтобы объект мог получить адрес своего же поля данных. Нужно в классе определить указатель на тип этого поля данных. После того как объект будет создан. Сперва следует инициализировать поле, а затем взять его адрес и присвоить указателю.
#include <iostream>
using namespace std;
class foo {
public:
foo() : var(0), ptr(NULL) { }
foo(int _var) : var(_var) { ptr = &var; }
int get_var() { return var; }
int * get_ptr() { return ptr; }
void set_var(int _var) { var = _var; }
void set_ptr(int * _ptr) { ptr = _ptr; }
private:
int var;
int * ptr;
};
int main() {
foo obj(5);
cout
Чтобы объект мог получить адрес своего же поля данных. Нужно в классе определить указатель на тип этого поля данных. После того как объект будет создан. Сперва следует инициализировать поле, а затем взять его адрес и присвоить указателю.
#include <iostream>
using namespace std;
class foo {
public:
foo() : var(0), ptr(NULL) { }
foo(int _var) : var(_var) { ptr = &var; }
int get_var() { return var; }
int * get_ptr() { return ptr; }
void set_var(int _var) { var = _var; }
void set_ptr(int * _ptr) { ptr = _ptr; }
private:
int var;
int * ptr;
};
int main() {
foo obj(5);
cout
Maksim Belov
"Они убили Кенни... Сволочи" (с) Этот вариант как раз и реализован, видимо здесь столкнулся с ограничениями ооп
>класс уже есть, возможно ли его видоизменить
Наследование, полиморфизм - не?
Наследование, полиморфизм - не?
Maksim Belov
Да хоть как. Хотелось бы добавить функционал для чужой разработки оптимальным образом. Тупо синтаксис интересует. Обычно, память выделяется для элемента класса, а что надо написать, если часть памяти уже выделено
короч смотри
у тебя есть класс коржик, от которого наследуются классы пирожено и морожено
у коржика есть метод схавать
но в пирожене он имплементируется как пожевать с чаем, а в морожене - полызькать
и вот у тебя пакет для коржиков. И ты туда наложил в перемешку пироженые и мороженые и тебе пофиг что ты от туда достанеш, ты вызываеш метод схавать. а уже реализация вызовется автоматом в зависимости от того что достанешь
вот это полиморфизм
у тебя есть класс коржик, от которого наследуются классы пирожено и морожено
у коржика есть метод схавать
но в пирожене он имплементируется как пожевать с чаем, а в морожене - полызькать
и вот у тебя пакет для коржиков. И ты туда наложил в перемешку пироженые и мороженые и тебе пофиг что ты от туда достанеш, ты вызываеш метод схавать. а уже реализация вызовется автоматом в зависимости от того что достанешь
вот это полиморфизм
Maksim Belov
Спасибо, кэп. Но с теорией у меня вроде как нормально, а вот с реализация хромает. У меня, как к Вини Пуха, "правильнописание хромает"
Похожие вопросы
- Microsoft Visual C++ 6.0 В одномерном массиве, состоящем из n вещественных элементов, вычислить...
- помогите!!! вопрос по C++ нужно написать программку "заполните массив так, чтобы все его элементы были различны.
- кто может сделать прогу в C++ которая поменяет местами в каждом столбце минимальный и максимальные элементы в матрице??
- Как в C# инициализировать массив в свойстве класса?
- Почему показывает, что диск C занят на 40 гигов, хотя все файлы на нём занимают всего лишь 15 гигов.
- Помогите решить задачу C++. Найти номер строки, для которой среднее арифметическое значение ее элементов максимальна
- [C++] Зачем делают указатель на класс?
- Где используется C# ?? В чем его плюсы и минусы ?? Что на нем пишется ??
- visual c++(form project) подскажите где там можно создать и описать свой класс? что то не выходит ((
- Помогите испрвить код Переписать первые элементы каждой строки матрицы a(n*m), больше некоторого числа C, в массив b .