Может ли статическая функция-член базового класса вызвать свой производный объект класса?Может ли статическая функция-член базового класса вызвать свой производный объект класса? (C++)
ответ
Подумайте, static
Функция-член как некоторая функция, не являющаяся членом. Так да. Независимо от функции, не входящей в число, функция static
может выполнять ту же самую вещь!
Да, хотя есть две вещи, на которые следует обратить внимание.
Первый - передовые ссылки. Если код вашего статического метода находится в файле .cpp
, вы должны иметь возможность безопасно # включать базовые и производные заголовки классов.
<Base.h>
class Base
{
protected:
Base();
public:
virtual ~Base();
static Base* Create();
};
<Derived.h>
#include "Base.h"
class Derived : public Base
{
public:
Derived(int aParameterGoesHere);
};
<Base.cpp>
#include "Base.h"
#include "Derived.h"
Base::Base() { }
Base::~Base() { }
Base* Base::Create()
{
return new Derived(42);
}
Вторая вещь, чтобы наблюдать за то, что частные/защищенные члены Derived
не доступны из Base
, если они не были признаны в качестве виртуальных членов Base
или Base
объявлен друг класс Derived
(который не является необоснованным, учитывая тесную связь):
<Derived.h>
#include "Base.h"
class Derived : public Base
{
friend Base;
private:
Derived(int aParameterGoesHere);
};
нет, она не может вызывать, так как статическая функция-член не имеет объекта, возложенные на него, поэтому он не имеет его производный объект класса.
Однако, это возможно, если вы используете CRTP, как это:
template<T>
struct base
{
base()
{
T::foo(); // here calling a static method of derived class
}
virtual ~base(){}
};
struct A : base<A>
{
virtual ~A(){}
static void foo()
{
// do stuff
}
};
VJo: почему бы не использовать функцию 'virtual' вместо этого? – Nawaz
@Nawaz Я не понимаю ваш вопрос. В статическом методе вы не можете получить доступ к этому. Если вы хотите использовать virtual вместо static для foo(), вы должны вызвать foo в базовом классе, а не в производном. –
- 1. Получить производный объект из объекта базового класса
- 2. Как производный класс может вызвать частный метод базового класса?
- 3. Производный объект класса переопределяет функцию базового класса в векторе объектов
- 4. Вызов функции базового класса через производный объект класса
- 5. В чем преимущество базового класса, удерживающего производный объект класса?
- 6. как остановить назначая производный объект класса для базового класса указателя
- 7. доступа объект базового класса из производного класса
- 8. может реализация производного класса коррумпированного базового класса
- 9. Наследование C#. Производный класс из базового класса
- 10. Может ли производный класс использовать функцию друга базового класса?
- 11. Вызываемый производный класс из базового класса (VB.NET)
- 12. Как обнулить производный объект в качестве базового класса
- 13. Метод базового класса return производный класс objec
- 14. Неявные беседы с ребенком (производный) класса к родителю (базового) класса
- 15. Как вызвать производный оператор присваивания из базового класса?
- 16. Должен ли производный класс обрабатывать события базового класса? (C#/WPF)
- 17. Пропустить экземпляр базового класса в производный класс
- 18. Как указатель производного класса может вызвать функцию базового класса
- 19. Указание базового класса на производный класс (ссылка)
- 20. виртуальный производный класс не виртуального базового класса
- 21. Указатель базового класса на производный тип
- 22. Как вызвать метод базового класса через указатель базового класса, указывая на производный класс
- 23. Использование базового класса Статическая константная переменная для построения базового класса, могу ли я это сделать?
- 24. C++ CRTP производный объект класса sliced
- 25. Java; литье базового класса в производный класс
- 26. производный класс не вызывает метод базового класса
- 27. Как сериализовать производный класс для базового класса?
- 28. CRTP - Как вызвать реализацию базового класса метода из производного класса?
- 29. Можно ли изменить объект базового класса на объект производного класса изнутри базового класса?
- 30. Производный класс игнорирует функции базового класса
что имеется в виду, называя производный объект класса? вы имеете в виду виртуальную функцию? – Naveen
Как статическая функция-член получает ссылку на производный объект? Также является ли вызов метода общедоступным или закрытым? И это виртуально? Можете ли вы поделиться каким-то кодом – Neera
Не могли бы вы рассказать нам, что вы имеете в виду здесь, - вызвать другую статическую функцию в производном объекте? Обратиться к полиморфной функции в производном объекте? – Elemental