C++ C+中的基本类继承+;
我正在键入以下代码,在第1行出现以下错误C++ C+中的基本类继承+;,c++,c++11,c++17,C++,C++11,C++17,我正在键入以下代码,在第1行出现以下错误 [错误]调用'int_adder::add()时没有匹配的函数 #包括 使用名称空间std; 类加法器{ 公众: void add(){cout正如其他人在评论中指出的,我已经纠正了它:- #include <iostream> using namespace std; class adder{ public: void add(){ cout <<"adder::add() "; }
[错误]调用'int_adder::add()时没有匹配的函数
#包括
使用名称空间std;
类加法器{
公众:
void add(){cout正如其他人在评论中指出的,我已经纠正了它:-
#include <iostream>
using namespace std;
class adder{
public:
void add(){ cout <<"adder::add() "; }
};
class int_adder : public adder{
public:
int add(int a, int b){
return (a + b);
}
};
int main(){
int_adder ia;
ia.adder::add(); //LINE-1
cout << ia.add(10, 20); //LINE-2
return 0;
}
#包括
使用名称空间std;
类加法器{
公众:
void add(){cout无法复制,但您可以使用using
指令,使基类中的重载可见:
#包括
使用名称空间std;
类加法器{
公众:
void add(){cout首先,您有两个完全不同的add版本。您不是在重写,而是在重载。您只是提供了一个新的add函数,它与父函数的另一个add函数无关
首先,你想覆盖还是重载
覆盖父添加将需要以下内容:
#include <iostream>
using namespace std;
class adder{
public:
void add(){ cout <<"adder::add() "; }
};
class int_adder : public adder{
public:
int add() override {cout <<"int_adder ::add() ";};
int add(int a, int b){
return (a + b);
}
};
int main(){
int_adder ia;
ia.adder::add(); //LINE-1 <- would work displays adder::add()'s message
cout << ia.add(10, 20); //LINE-2
adder ia = int_adder{}; // now this is interesting
ia.add(); // would work displays adder::add()'s message - cause you did not ask for virtuality
return 0;
}
#包括
使用名称空间std;
类加法器{
公众:
void add()
。根据标准,int\u adder::add()
具有隐藏adder::add()
,而不是覆盖或重载它的效果。这被非正式地称为“隐藏规则”。这是否回答了您的问题?这是否回答了您的问题?
#include <iostream>
using namespace std;
class adder{
public:
void add(){ cout <<"adder::add() "; }
};
class int_adder : public adder{
public:
using adder::add; // expose base class overload as our own
int add(int a, int b){
return (a + b);
}
};
int main(){
int_adder ia;
ia.add(); //LINE-1
ia.adder::add(); // explicit name also works
cout << ia.add(10, 20); //LINE-2
return 0;
}
#include <iostream>
using namespace std;
class adder{
public:
void add(){ cout <<"adder::add() "; }
};
class int_adder : public adder{
public:
int add() override {cout <<"int_adder ::add() ";};
int add(int a, int b){
return (a + b);
}
};
int main(){
int_adder ia;
ia.adder::add(); //LINE-1 <- would work displays adder::add()'s message
cout << ia.add(10, 20); //LINE-2
adder ia = int_adder{}; // now this is interesting
ia.add(); // would work displays adder::add()'s message - cause you did not ask for virtuality
return 0;
}