15201315716 发表于 2014-8-19 23:37:48

求助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;谢谢!

elvo 发表于 2014-8-19 23:47:38

又不是static,改用p->eat(p->name)

15201315716 发表于 2014-8-20 00:07:55

elvo 发表于 2014-8-19 23:47
又不是static,改用p->eat(p->name)

大神牛逼啊不太懂static....这个 eat. 和eat->有啥本质区别?

elvo 发表于 2014-8-20 08:16:23

15201315716 发表于 2014-8-20 00:07
大神牛逼啊不太懂static....这个 eat. 和eat->有啥本质区别?

.和->的用法区别主要是看你类对象的声明,如果是一个实体就用.操作,如果是指针就要->操作,这个似乎就c++中区分,java和C#中没有这个区分,全用.操作

15201315716 发表于 2014-8-21 03:02:46

elvo 发表于 2014-8-20 08:16
.和->的用法区别主要是看你类对象的声明,如果是一个实体就用.操作,如果是指针就要->操作,这个似乎就c+ ...

感谢哈!懂了

calton007 发表于 2014-8-21 22:29:12

15201315716 发表于 2014-8-20 00:07
大神牛逼啊不太懂static....这个 eat. 和eat->有啥本质区别?

eat->等价于(*eat).
页: [1]
查看完整版本: 求助C++友元类如何调用基类方法问题