自定义类中,有关const作函数的形式参数

来源:百度知道 编辑:UC知道 时间:2024/05/31 11:14:59
#include <iostream>
#include <cmath>
#include<string>

using namespace std;

class animal {
public:
animal() {cout<<"animal 构造函数"<<endl;}
virtual ~animal() {cout<<"animal 析构函数"<<endl;}
virtual void say() = 0;
};

class dog:public animal {
public:
dog() {cout<<"dog 构造函数"<<endl;}
~dog() {cout<<"animal 析构函数"<<endl;}
void say();
};
void dog::say() {cout<<"dog say"<<endl;}

void f(const animal *ag) {
ag->say();
}
main() {
dog dg;
// animal *am = &dg;
// am->say();
f(&dg);
return 0;
}

cannot convert 'this' pointer from 'const class animal' to 'class animal &'

为什么说指针不能指向animal的引用啊?
我用法应该没错吧

void f(const animal *ag) {
ag->say();
}

变为
void f(animal *ag) {
ag->say();
}

或者改成下面这样子
#include <iostream>
#include <cmath>
#include<string>

using namespace std;

class animal {
public:
animal() {cout<<"animal 构造函数"<<endl;}
virtual ~animal() {cout<<"animal 析构函数"<<endl;}
virtual void say()const = 0 ;
};

class dog:public animal {
public:
dog() {cout<<"dog 构造函数"<<endl;}
~dog() {cout<<"animal 析构函数"<<endl;}
void say()const;
};
void dog::say()const {cout<<"dog say"<<endl;}

void f(const animal *ag) {
ag->say();
}
int main() {
dog dg;
// animal *am = &dg;
// am->say();
f(&dg);
return 0;
}

具体的原因就是因为const的限制

const修饰的参数代表着