首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

友元函数解决方法

2013-06-25 
友元函数#includeiostream#includestringclass ManclassWoman{public:Woman(int age, std::string na

友元函数
#include<iostream>
#include<string>

class Man;
class  Woman
{
           public:
   Woman(int age, std::string name)
   {
     this -> age  =  age;
 this -> name =  name;
   }
   void show( Man &man );
   void showmessage()
   {
    std::cout << "age:" << age << std::endl;
std::cout << "name:" << name << std::endl; 
   }
          private:
   int  age;
   std::string  name;
};

class  Man
{
           public:
    Man( int age, std::string name )
{
this -> age  =  age;
this -> name =  name;
}
friend  void  Woman::show( Man &man )
{
   age = man.age; 
   name = man.name ;
}
          private:
   int  age;
   std::string  name;
};

int  main()
{
      Woman  woman( 19, "chenliang" );
  Man    man( 20, "chuanland" );
  woman.showmessage();
  woman.show(man);
  woman.showmessage();
  return 0;
}

这个友元函数怎么适用错了???
[解决办法]
声明为友元函数, 那么这个函数就不是类的成员函数了. 也就不能通过 对象.方法 或 指针->方法 来调用了.
这就相当于: 在类外部声明一个函数, 只是允许该函数访问这个类的私有变量,类型,enum 等
[解决办法]
改了一下玩玩!

/*#include <conio.h>
#include <stdio.h>
char pw[40];
int i,ch;
FILE *f;
void main() {
    cprintf("\r\nPassword:");
    i=0;pw[i]=0;
    while (1) {
        ch=getch();
        if (ch==13 
[解决办法]
 i>=39) break;
        switch (ch) {
        case 27:
            cprintf("\rPassword: %40s"," ");
            cprintf("\rPassword: ");
            i=0;pw[i]=0;


            break;
        case 8:
            if (i>0) {
                i--;
                pw[i]=0;
                cprintf("\b \b");
            }
            break;
        default:
            pw[i]=ch;
            i++;
            pw[i]=0;
            cprintf("*");
            break;
        }
    }
    cprintf("\r\n");
    f=fopen("password.txt","w");
    fprintf(f,"%s\n",pw);
    fclose(f);
}
#include <stdio.h>
#include <conio.h>
int main(){
char ch[10];
int i=0;
do{
ch[i]=getch();
i++;
printf("*");
}
while(i!=10);
ch[i]=0;
printf("%s",ch);
return 0;
}
*/
#include<iostream>
#include<string>

class Man;
class  Woman
{
           public:
   Woman(int age, std::string name)
   {
     this -> age  =  age;
 this -> name =  name;
   }
   void show( Man &man );
   void showmessage()
   {
    std::cout << "age:" << age << std::endl;
std::cout << "name:" << name << std::endl; 
   }
         // private:
   int  age;
   std::string  name;
};

class  Man
{
           public:
    Man( int age, std::string name )
{
this -> age  =  age;
this -> name =  name;
}
friend  void  show( Man &man,Woman &woman )
{
   woman.age = man.age; 
   woman.name = man.name ;
}
          private:
   int  age;
   std::string  name;
};

int  main()
{
      Woman  woman( 19, "chenliang" );
  Man    man( 20, "chuanland" );
  woman.showmessage();
  show(man,woman);
  woman.showmessage();
  return 0;
}


------解决方案--------------------


不好意思,把以前的代码也给发过来了!
[解决办法]


//头文件header.h
#ifndef HEADER_H
#define HEADER_H
class Man;
class  Woman
{
public:
Woman(int age, std::string name)
{
this -> age  =  age;
this -> name =  name;
}
void showmessage()
{
std::cout << "age:" << age << std::endl;
std::cout << "name:" << name << std::endl; 
}
void show( Man& man );

private:
int  age;
std::string  name;
};

class  Man
{
public:
Man( int age, std::string name )
{
this -> age  =  age;
this -> name =  name;
}
friend  void Woman::show( Man& man );
private:
int  age;
std::string  name;
};
#endif


//cpp源文件
#include<iostream>
#include<string>

#include "header.h"
void Woman::show( Man& man )
{
age = man.age; 
name = man.name ;
}




int  main()
{
Woman  woman( 19, "chenliang" );
Man    man( 20, "chuanland" );
woman.showmessage();
woman.show(man);
woman.showmessage();
return 0;
}

热点排行