Я видел этот код онлайн, и мне было интересно, как оно реализовано. Поскольку указатели функций-членов не могут быть назначены указателям на функции-члены базового класса, мне любопытно, где хранятся указатели на функции-члены производного класса и как.Наследование функций указателей функций
Это заголовочный файл с тестовыми декларациях
#ifndef TestStudent_h
#define TestStudent_h
#include <iostream>
#include <string>
// Note 1
#include "TestCase.h"
#include "TestSuite.h"
#include "TestCaller.h"
#include "TestRunner.h"
#include "Student.h"
class StudentTestCase : public TestCase { // Note 2
public:
// constructor - Note 3
StudentTestCase(std::string name) : TestCase(name) {}
// method to test the constructor
void testConstructor();
// method to test the assigning and retrieval of grades
void testAssignAndRetrieveGrades();
// method to create a suite of tests
static Test *suite();
};
#endif
И это реализация функции, которая добавляет функции-члены какой-то список
// method to create a suite of tests - Note 7
Test *StudentTestCase::suite() {
TestSuite *testSuite = new TestSuite ("StudentTestCase");
// add the tests
testSuite->addTest (new TestCaller
("testConstructor", &StudentTestCase::testConstructor));
testSuite->addTest (new TestCaller
("testAssignAndRetrieveGrades",
&StudentTestCase::testAssignAndRetrieveGrades));
return testSuite;
}
мне было интересно, какие данные тип функции-члена хранятся, поскольку они не могут быть сохранены в любом типе указателя функции, известном базовому классу. Также место, где они хранятся, должно будет знать тип класса, в котором они определены, так как любой объект, который называет их e объектам необходимо будет «связать» эти функции с объектами этого типа слишком правильно? В частности, в этой функции, как будет TestCaller
знать, как вызвать функции-члены, которые были добавлены к нему?
@ n.m. Но их нужно где-то хранить? – Curious
Базовый класс не задействован, TestSuite есть. – kfsone
Извините, я думаю, что не понимаю, о чем вы спрашиваете. Функции-члены не «хранятся» нигде, они просто есть. Указатели функций функций хранятся в их soecialized типах данных. Это примитивные типы данных без какой-либо структуры. –