读书人

友元函数解决方法

发布时间: 2013-06-25 23:45:41 作者: rapoo

友元函数
#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;
}

读书人网 >C++

热点推荐