求助C++友元类如何调用基类方法问题
本程序建立基类Animal,继承类Dog,友元类Cat,想通过Cat类中的cateat()调用基类animaleat(),却不能成功,求帮忙看看代码哪里有问题?#include<iostream>#include<string>
using namespace std;
class Animal
{
public:
void animalname(string thename)
{
name=thename;
}
void eat(string name)
{
cout<<name<<"eating!\n"<<endl;
}
private:
string name;
friend class Cat;
};
class Pig: public Animal
{
public:
void pigname(string thename)
{
name=thename;
}
void climb()
{
cout<<name<<"climbing!\n"<<endl;
}
protected:
string name;
};
class Cat
{
public:
string name;
void catname(Animal * p)
{
name=p->name;
}
void cateat(Animal * p)
{
p.eat(p->name); //<font color="#ff0000"><b>此行代码出现错误,<span style="background-color: rgb(255, 255, 255);">想</span>通过Cat类中的cateat()调用基类animaleat(),却不能成功</b></font>
}
};
int main()
{
Animal animal;
Pig pig;
Cat cat;
animal.animalname("小动物");
animal.eat("小动物");
pig.pigname("大狗");
pig.eat("大狗");
pig.climb();
cat.catname( &animal);
cat.cateat(&animal);
cout<<cat.name<<endl;谢谢! 又不是static,改用p->eat(p->name) elvo 发表于 2014-8-19 23:47
又不是static,改用p->eat(p->name)
大神牛逼啊不太懂static....这个 eat. 和eat->有啥本质区别? 15201315716 发表于 2014-8-20 00:07
大神牛逼啊不太懂static....这个 eat. 和eat->有啥本质区别?
.和->的用法区别主要是看你类对象的声明,如果是一个实体就用.操作,如果是指针就要->操作,这个似乎就c++中区分,java和C#中没有这个区分,全用.操作 elvo 发表于 2014-8-20 08:16
.和->的用法区别主要是看你类对象的声明,如果是一个实体就用.操作,如果是指针就要->操作,这个似乎就c+ ...
感谢哈!懂了 15201315716 发表于 2014-8-20 00:07
大神牛逼啊不太懂static....这个 eat. 和eat->有啥本质区别?
eat->等价于(*eat).
页:
[1]