鱼C论坛

 找回密码
 立即注册
查看: 2123|回复: 5

求助C++友元类如何调用基类方法问题

[复制链接]
发表于 2014-8-19 23:37:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本程序建立基类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;
谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-19 23:47:38 | 显示全部楼层
又不是static,改用p->eat(p->name)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-20 00:07:55 | 显示全部楼层
elvo 发表于 2014-8-19 23:47
又不是static,改用p->eat(p->name)

大神牛逼啊  不太懂static....这个 eat. 和eat->有啥本质区别?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-20 08:16:23 | 显示全部楼层
15201315716 发表于 2014-8-20 00:07
大神牛逼啊  不太懂static....这个 eat. 和eat->有啥本质区别?

.和->的用法区别主要是看你类对象的声明,如果是一个实体就用.操作,如果是指针就要->操作,这个似乎就c++中区分,java和C#中没有这个区分,全用.操作
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

感谢哈!懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-21 22:29:12 | 显示全部楼层
15201315716 发表于 2014-8-20 00:07
大神牛逼啊  不太懂static....这个 eat. 和eat->有啥本质区别?

eat->等价于(*eat).
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 20:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表