Member 13816159 Ответов: 4

Как вызвать функцию из класса, содержащего конструктор, без вызова конструктора?


Здравствуйте, это может быть глупый вопрос, но есть ли способ получить доступ к функции из класса, в котором есть конструктор, не вызывая его конструктор? Вот вам пример:

Что я уже пробовал:

class Point {
private:
	int x, y;
public:
	Point()
	{
		x = 1;
		y = 2;
	}
	void callthis() {
		cout << "I want to call this" << endl;
	}
};

4 Ответов

Рейтинг:
22

Chris Losinger

если вы не можете изменить класс, то нет, вы не можете вызвать функцию-член без создания экземпляра объекта (он же вызов конструктора).


Рейтинг:
2

Wendelius

Если я правильно понял ваш вопрос, вы можете определить функцию как статическую и вызвать ее без создания экземпляра класса. Взгляните на это Статические члены класса C++ [^]


Рейтинг:
0

KarstenK

Первое решение, которое объявляет функцию статической, является правильным, но учтите, что у вас нет экземпляра объекта, на котором вы можете выполнить эту функцию.

Мой опыт таков, что статическая функция или такая проблема лишь симптом из некоторых более скрытых проблем, таких как не принадлежность к этому классу или функции вообще не являются оптимальными.

Поэтому подумайте о перепроектировании этого класса и функции.


KarstenK

Это вполне возможно. Я видел окончание таких "полезных" классов как беспорядок нелюбимых вещей. Обычно наиболее важным параметром является подсказка для использования класса.

Рейтинг:
0

CPallini

Как и предлагалось вы должны сделать этот метод static. Это подходит для метод класса, то есть методы, независимые от экземпляра класса. например.

#include <iostream>
using namespace std;

class Point
{
private:
    int x, y;
public:
  Point()
  {
    x = 1;
    y = 2;
  }

  static Point origin()
  {
    Point p;
    p.x = p.y = 0;
    return p;
  }

  void show()
  {
    cout << "{ x = " << x << ", y = " << y << " }" << endl;
  }
};


int main()
{
  Point p;
  p.show();

  p = Point::origin();

  p.show();
}


В приведенном выше примере кода static метод origin может быть вызван (и, по сути, вызывается) без наличия Point ссылка на объект. С другой стороны, стандартный (экземпляр) метод show это называется Point ссылка на объект.
Примечание метод origin не может получить доступ ни к одному из них Point член экземпляра.