代碼如下:
#include <iostream>
class Base{
public:
virtual void print(){
std::cout << "Base print" << std::endl;
}
};
class Derived : public Base{
public:
virtual void print(){
std::cout << "Derived print" << std::endl;
}
};
void call(const Base& base){
base.print();
}
int main(int argc, char** argv) {
Derived a;
call(a);
return 0;
}
錯誤原因:
在void call(const Base& base)函數中傳遞的參數是const類型的base,base是不允許被更改的,但是在call()函數內部卻調用了非const類型的print()函數,編譯器會以爲你要改變base,所以就報錯
改正
將基類和派生類的print()函數改爲constle類型,修改如下:
#include <iostream>
class Base{
public:
virtual void print() const{
std::cout << "Base print" << std::endl;
}
};
class Derived : public Base{
public:
virtual void print() const{
std::cout << "Derived print" << std::endl;
}
};
void call(const Base& base){
base.print();
}
int main(int argc, char** argv) {
Derived a;
call(a);
return 0;
}