我想在抽象类中定义一个函数,该类调用抽象(虚拟)函数。但是当我从抽象类继承时,这个函数不会被继承:
class A {
public:
virtual void f(int t) = 0;
void f() {
f(0);
}
};
class B : public A {
public:
void f(int t) override { }
// using A::f; // uncomment to fix the problem
};
int main() {
B b;
b.f(0); // works
b.f(); // error: no matching function for call to ‘B::f()’
}
为什么这不起作用?解决方法是使用using A::f
,但为什么A::f()
没有继承?
答案 0 :(得分:2)
它不起作用,因为/* Sort the array using Recursive insertion sort */
#include <stdio.h>
#include <conio.h>
void RecursiveInsertionSort(int a[], int);
/* Recursively call the function to sort the array */
void RecursiveInsertionSort(int *a, int n)
{
int i,k;
if (n > 1)
RecursiveInsertionSort(a, n - 1);//Call recursively
else {
k = a[n];
i = n - 1;
while (i >= 0 & & a[i] > k){
a[i + 1] = a[i]; //replace the bigger
i = i - 1;
}
a[i + 1] = k; //Place the key in its proper position
}
}
/* Main function */
void main()
{
int a[] = { 5,4,3,2,1 }; // Array unsorted declared
RecursiveInsertionSort(a, 5);//call recursive function to sort the array in ascending order
}
没有 df <- data.frame(C1 = c("1","0","0","1","1"), C2 = c(11,21,22,31,35))
df
# C1 C2
# 1 1 11
# 2 0 21
# 3 0 22
# 4 1 31
# 5 1 35
One <- df[df$C1 == "1","C2"]
Zero <- df[df$C1 == "0","C2"]
One
# [1] 11 31 35
Zero
# [1] 21 22
n <- max(length(One),length(Zero))
n
# 3
length(One) <- 3
length(Zero) <- 3
Result <- cbind(One,Zero)
Result
# One Zero
# [1,] 11 21
# [2,] 31 22
# [3,] 35 NA
,只有B
。
如果f()
没有任何名为f(int)
的函数,那么将搜索超类的匹配函数,并发生重载决策。但是因为子类B
已经有一个名为f
的函数,所以不搜索超类,并且重载解析发生在B
中。
这是f
关键字的用途,使超类的B
成为using
命名空间的一部分。这里的答案是,“这是因为这就是C ++的工作方式”。