鱼C论坛

 找回密码
 立即注册
查看: 1993|回复: 3

求朋友帮我看看这段代码 友元关系怎么没用?

[复制链接]
发表于 2012-12-24 23:37:02 | 显示全部楼层 |阅读模式

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

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

x
#include <iostream>
#include <string>

class Lovers
{
public:
        Lovers();
        void kiss();
};

Lovers::Lovers()
{
}
void Lovers::kiss()
{
        std::cout << "正在亲吻!!!.................." << std::endl;
}

class Boyfriend:public Lovers
{
public:
        void zhui(std::string name);
        void fuwo();
        Boyfriend(std::string name);
//protected:
        std::string boyname;
};

Boyfriend::Boyfriend(std::string name)
{
        boyname = name;
}
void Boyfriend::fuwo()
{
        std::cout << "我正在做俯卧撑............." << std::endl;
}

void Boyfriend::zhui(std::string name)
{
        std::cout << name << " 请问可以追你吗?!!!" << std::endl;
}
class Girlfriend:public Lovers
{
public:
        void ask(std::string name,std::string whater);
        Girlfriend(std::string name);
protected:
        std::string girlname;
        //friend class Boyfriend;    //这里说明Boyfriend类和Girlfriend类是友元关系
};

Girlfriend::Girlfriend(std::string name)
{
        girlname = name;
}
void Girlfriend::ask(std::string name,std::string whater)
{
        std::cout << name << "你给我去做" << whater << "完成了我就答应你!!!" << std::endl;
}
int main()
{
        Boyfriend boyf("九尾狐");
        Girlfriend girlf("封芯狐");
        boyf.zhui(girlf.girlname);  //这里调用Girlfriend类里的girlname 我用了友元关系还是提示" 'girlname' : cannot access  protected member declared in class 'Girlfriend'"
        girlf.ask(boyf.boyname,"一万次俯卧撑");
        boyf.fuwo();
        boyf.kiss();
        return 0;
}

求朋友帮我看看 看了1一个小时也没解决了 :dizzy:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-16 23:13:37 | 显示全部楼层
同求啊,有高人帮忙吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2015-8-25 12:54:50 | 显示全部楼层
友元关系并不是指对象可以调用隐藏属性给友元函数,隐藏属性无论如何都是不可以被对象调用;
友元关系指的是在此类里面可以调用友元类的各种属性和方法
比如你的这个函数可以Boyfriend::boyf(std::string name)
{
std::cout << name << " 请问可以追你吗?!!!" << std::endl;
}
可以改为:
Boyfriend::boyf(Girlfriend *p)
{
std::cout << p->girlname << " 请问可以追你吗?!!!" << std::endl;
}

上面girlname是隐藏的但仍能被调用,如果没有友元关系系统会报错提示你girlname是受保护的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-8-25 12:56:06 | 显示全部楼层
<命> 发表于 2013-4-16 23:13
同求啊,有高人帮忙吗?

友元关系并不是指对象可以调用隐藏属性给友元函数,隐藏属性无论如何都是不可以被对象调用;
友元关系指的是在此类里面可以调用友元类的各种属性和方法
比如你的这个函数可以Boyfriend::boyf(std::string name)
{
std::cout << name << " 请问可以追你吗?!!!" << std::endl;
}
可以改为:
Boyfriend::boyf(Girlfriend *p)
{
std::cout << p->girlname << " 请问可以追你吗?!!!" << std::endl;
}

上面girlname是隐藏的但仍能被调用,如果没有友元关系系统会报错提示你girlname是受保护的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-26 07:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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