вопрос про методы объекта

vlfdimir58

Вопрос, наверно, простой.
Есть класс со своими методами.
Можно ли у данного, отдельно взятого, объекта этого класса перекрыть какой-нить метод?

stream2008

Можно. Вроде как для этого надо перед объявлением перекрывающей функции слово overload написать.

okunek

а что значит перекрыть? че-то я не просекаю нифига.
а overload - это вообще перегрузка, но чтобы в c++ сделать перегруженные методы, не надо ничего писать.

vlfdimir58

класс GWindow
метод класса - f
объект класса Gwindow w
Хочу для этого объекта сделать метод f другим.
что для этого надо сделать?

ppplva

C++ ? Напрямую нет. Можно извратиться, и, например, хранить в объекте ссылку на метод.

okunek


class class1
{
public:
void f(int a);
};
void class1::f(int a)
{
}
class class2 : public class1
{
public:
int f(int a, int b);
};
int class2::f(int a,int b)
{
return 0;
}



так?

tokuchu

Для объекта не получится, т.к. он тогда "выпадает" из класса. Наследование для этого и используется как раз. Ещё как вариант можешь воспользоваться указателем на ф-ю.

Aleksei66

В принципе указатель почти тоже самое. Если хакерить, то можно еще таблицу виртуальных функций подделать. Но это уж совсем как-то по кульхацкерски.

vlfdimir58

может просто в класс добавить свойство-флаг для второй реализации метода f если флаг ненулевой.
и перед вызовом f для объекта, поменять флаг. а потом вернуть на место.. ?

Aleksei66

Может ты имеешь ввиду что-то типа:


class A {
....
void (*my_methodint*);
void my_1st_method(int* i) {
...
}
void my_fake_method(int* i) {
if (my_method)
my_method(i);
else
my_1st_method(i);
}
....

tokuchu

Ну это уже параметры класса...
Ты задаёшь некоторый параметр в классе: P, от которого зависит поведение F(P). P - это может быть некоторый флаг или указатель на метод... т.е. смысл тот же. В каждом случае нужно рассматривать отдельно что правильнее сделать будет - юзать наследование/виртуальные функции или параметризацию.

vlfdimir58

Вот что есть

class MyWindow: public GWindow { // Our main class
R2Point lastClick; // Last mouse click point
bool clicked; // Mouse was clicked
unsigned int mouseButton; // Mouse state
public:
MyWindow: // Constructor
lastClick
clicked(false
mouseButton(0)
{}
double f(double x); // Function y = f(x)
double df(double x); // Derivative of the function y = f'(x)
double ddf(double x); // 2nd derivative of function y =f''(x)
void drawGraphic; // Draw graph of function
...........................
};
.............
double MyWindow::f(double x) {
return 5. / (1. + 0.1*x*x);
}


Может вот так?
Вот что есть

class MyWindow: public GWindow { // Our main class
R2Point lastClick; // Last mouse click point
bool clicked; // Mouse was clicked
unsigned int mouseButton; // Mouse state


bool fflag;


public:
MyWindow: // Constructor
lastClick
clicked(false
mouseButton(0)
{}
double f(double x); // Function y = f(x)
double df(double x); // Derivative of the function y = f'(x)
double ddf(double x); // 2nd derivative of function y =f''(x)
void drawGraphic; // Draw graph of function
...........................
};
.............
double MyWindow::f(double x) {


if (fflag) {


return 5. / (1. + 0.1*x*x);


} else { return 1 + x*x; }
}

vlfdimir58

все, вопрос пока снят, спасибо всем!
Оставить комментарий
Имя или ник:
Комментарий: