вопрос про методы объекта
Можно. Вроде как для этого надо перед объявлением перекрывающей функции слово overload написать.
а overload - это вообще перегрузка, но чтобы в c++ сделать перегруженные методы, не надо ничего писать.
метод класса - f
объект класса Gwindow w
Хочу для этого объекта сделать метод f другим.
что для этого надо сделать?
C++ ? Напрямую нет. Можно извратиться, и, например, хранить в объекте ссылку на метод.
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;
}
так?
Для объекта не получится, т.к. он тогда "выпадает" из класса. Наследование для этого и используется как раз. Ещё как вариант можешь воспользоваться указателем на ф-ю.
В принципе указатель почти тоже самое. Если хакерить, то можно еще таблицу виртуальных функций подделать. Но это уж совсем как-то по кульхацкерски.
и перед вызовом f для объекта, поменять флаг. а потом вернуть на место.. ?
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);
}
....
Ты задаёшь некоторый параметр в классе: P, от которого зависит поведение F(P). P - это может быть некоторый флаг или указатель на метод... т.е. смысл тот же. В каждом случае нужно рассматривать отдельно что правильнее сделать будет - юзать наследование/виртуальные функции или параметризацию.
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
Вопрос, наверно, простой.Есть класс со своими методами.
Можно ли у данного, отдельно взятого, объекта этого класса перекрыть какой-нить метод?