从使用派生 class 的成员函数的基 class 调用函数
Call a function from base class that uses the member functions of derived class
我创建了一个几乎完全相同的 class 和派生的 class。
唯一的区别是派生的 class 有 2 个不同的函数和 3 个额外的变量。我希望 class B 中的被调用函数使用继承的函数,但使用 class B 的 PrivFunctions。相反,在调用时,该函数使用他自己的 class、class A.
class A
{
protected:
double x,y,z;
Function() {
*do something using the member variables of class A and the member functions of class A* }
private:
double PrivFunction() {
*take in member variables from A and return a certain value* }
double PrivFunction2() {
*take in member variables from A and return a certain value* }
class B : public A
{
private:
double a,b,c;
double PrivFunction() {
*take in member variables from A,B and return a certain value* }
double PrivFunction2() {
*take in member variables from A,B and return a certain value* }
main() {
B classb();
B.Function()
}
我考虑过在 Function() 中添加私有函数的地址,但这似乎太牵强了。我觉得我遗漏了一些简单的东西,但我就是找不到如何巧妙地做到这一点
您需要做的是将基 class 中的函数声明为 virtual
。这是一种你在baseclassA
中定义的函数类型,然后需要在sub-classes中重新定义。将函数声明为 virtual
可确保调用正确的函数并避免歧义。
您的代码应如下所示:
class A
{
protected:
double x, y, z;
//define as virtual
virtual Function(){/*do something*/}
/*
rest of your code
*/
}
class B: public A
{
private:
double a, b, c
public:
//redefine your function in the subclass
Function(){/*do something else*/}
/*
rest of your code
*/
}
int main()
{
B classb();
//This will now use B's Function
classb.Function();
}
我创建了一个几乎完全相同的 class 和派生的 class。 唯一的区别是派生的 class 有 2 个不同的函数和 3 个额外的变量。我希望 class B 中的被调用函数使用继承的函数,但使用 class B 的 PrivFunctions。相反,在调用时,该函数使用他自己的 class、class A.
class A
{
protected:
double x,y,z;
Function() {
*do something using the member variables of class A and the member functions of class A* }
private:
double PrivFunction() {
*take in member variables from A and return a certain value* }
double PrivFunction2() {
*take in member variables from A and return a certain value* }
class B : public A
{
private:
double a,b,c;
double PrivFunction() {
*take in member variables from A,B and return a certain value* }
double PrivFunction2() {
*take in member variables from A,B and return a certain value* }
main() {
B classb();
B.Function()
}
我考虑过在 Function() 中添加私有函数的地址,但这似乎太牵强了。我觉得我遗漏了一些简单的东西,但我就是找不到如何巧妙地做到这一点
您需要做的是将基 class 中的函数声明为 virtual
。这是一种你在baseclassA
中定义的函数类型,然后需要在sub-classes中重新定义。将函数声明为 virtual
可确保调用正确的函数并避免歧义。
您的代码应如下所示:
class A
{
protected:
double x, y, z;
//define as virtual
virtual Function(){/*do something*/}
/*
rest of your code
*/
}
class B: public A
{
private:
double a, b, c
public:
//redefine your function in the subclass
Function(){/*do something else*/}
/*
rest of your code
*/
}
int main()
{
B classb();
//This will now use B's Function
classb.Function();
}