鱼C论坛

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

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

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

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

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

x
本程序建立基类Animal,继承类Dog,友元类Cat,想通过Cat类中的cateat()调用基类animaleat(),却不能成功,求帮忙看看代码哪里有问题?
  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4. class Animal
  5. {
  6.   public:
  7.       
  8.       void animalname(string thename)
  9.           {
  10.                   name=thename;
  11.           }  
  12.           void eat(string name)
  13.           {
  14.               cout<<name<<"eating!\n"<<endl;
  15.           }
  16. private:
  17.   string name;
  18.    
  19. friend class Cat;
  20. };

  21. class Pig: public Animal
  22. {
  23. public:
  24.     void pigname(string thename)
  25.         {
  26.                 name=thename;
  27.         }
  28.        
  29.         void climb()
  30.         {
  31.           cout<<name<<"climbing!\n"<<endl;
  32.         }       

  33. protected:
  34.     string name;
  35. };

  36. class Cat
  37.         {
  38.         public:
  39.            string name;
  40.            void catname(Animal * p)
  41.                    {
  42.                        name=p->name;
  43.               }
  44.               void cateat(Animal * p)
  45.               {
  46.                           p.eat(p->name);                //<font color="#ff0000"><b>此行代码出现错误,<span style="background-color: rgb(255, 255, 255);">想</span>通过Cat类中的cateat()调用基类animaleat(),却不能成功</b></font>
  47.               }
  48.         };
  49.        
  50. int main()
  51. {  
  52.         Animal animal;
  53.     Pig pig;
  54.     Cat cat;
  55.    
  56.         animal.animalname("小动物");
  57.         animal.eat("小动物");

  58.     pig.pigname("大狗");
  59.         pig.eat("大狗");
  60.         pig.climb();
  61.        
  62.     cat.catname( &animal);
  63.     cat.cateat(&animal);
  64.         cout<<cat.name<<endl;
复制代码
谢谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-8-19 23:47:38 | 显示全部楼层
又不是static,改用p->eat(p->name)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

大神牛逼啊  不太懂static....这个 eat. 和eat->有啥本质区别?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

.和->的用法区别主要是看你类对象的声明,如果是一个实体就用.操作,如果是指针就要->操作,这个似乎就c++中区分,java和C#中没有这个区分,全用.操作
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

感谢哈!懂了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

eat->等价于(*eat).
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-12 21:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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