/*预引用.告诉编译器类B将会在后面定义.使用了预引用后,就可以声明未定义的类的友元、指针和引用。但是不可以使用那些需要知道预引用的类的定义细节的语句,如声明该类的一个实例或者任何对该类成员的引用。*/
class B; /*注明见上*/
class A
{
public:
firend B;
};
class B
{ };
若不使用预引用.则声明友元时必须加class.
class A
{
public:
friend B;//false
friend class B; // ture.
};
class B
{ };
=================下面是我写的例子=====================
Student.h:
#ifndef _STUDENT_H_
#define _STUDENT_H_
#include "DataBase.h"
//using namespace Student;
class Student
{
private:
char name[3];
int age;
char sex;
public:
Student();
Student(char newname[3],int newage,char newsex);
friend Student &visit(Student &stu,char *name,char newsex);
friend class Teacher;
~Student();
void input(char newname[3],int newage,char newsex);
int getAge();
void output();
};
class Teacher
{
private:
char name[3];
int age;
char sex;
float sales;
public:
Teacher();
Teacher(char newname[3],int newage,char newsex);
~Teacher();
Student &visit(Student &stu,char *name,char newsex);
void output();
};
#endif
Student.cpp
#include "Student.h"
Student::Student(char newname[3],int newage,char newsex) {
cout<<"进入Student::Student(char newname[3],int newage) 构造函数!"<<endl;
for(int i=0;i<3;i++)
{
name[i] = newname[i];
}
this->age = newage;
this->sex = newsex;
}
Student::Student()
{
cout<<"进入构造函数----Student::Student"<<endl;
name[0] = 'T';
name[1] = 'o';
name[2] = 'm';
this->age = 25;
this->sex = 'F';
}
Student::~Student()
{
cout<<"进入析构函数----Student::~Student"<<endl;
}
int Student::getAge()
{
return this->age;
}
void Student::input(char newname[3],int newage,char newsex)
{
this->age = newage;
sex = newsex;
}
Student &visit(Student &stu,char *name,char newsex)
{
cout<<"=========进入友元函数!!!!==================="<<endl;
strcpy(stu.name,name);
stu.sex = newsex;
cout<<"=========友元函数结束!!!!==================="<<endl;
return stu;
}
void Student::output()
{
cout<<name<<" "<<age<<" "<<sex<<endl;
}
Student &Teacher::visit(Student &stu,char *name,char newsex)
{
cout<<"=========进入Teacher类的Student &Teacher::visit()函数!!!!==================="<<endl;
strcpy(stu.name,name);
stu.sex = newsex;
cout<<"=========访问Teacher类的Student &Teacher::visit()函数------结束!!!!==================="<<endl;
return stu;
}
Teacher::Teacher()
{
cout<<"进入构造函数----Teacher::Teacher"<<endl;
name[0] = 'T';
name[1] = 'o';
name[2] = 'm';
this->age = 25;
this->sex = 'F';
this->sales = 860.49;
}
Teacher::~Teacher()
{
cout<<"进入析构函数----Teacher::~Teacher"<<endl;
}
调用
Teacher t;
Student s;
t.visit(s,"why",'B').output();
分享到:
相关推荐
本文档详细介绍了C++友元函数及友元类,方便大家对比学习
Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-C++Dev-...
暗黑风格-C++八股文-v1.0.pdf暗黑风格-C++八股文-v1.0.pdf暗黑风格-C++八股文-v1.0.pdf暗黑风格-C++八股文-v1.0.pdf暗黑风格-C++八股文-v1.0.pdf暗黑风格-C++八股文-v1.0.pdf暗黑风格-C++八股文-v1.0.pdf暗黑风格-...
如何声明和创建友元类 简单友元类的声明,C++中友元类的应用范围
warning: gcc-c++-4.4.7-3.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY error: Failed dependencies: gcc = 4.4.7-3.el6 is needed by gcc-c++-4.4.7-3.el6.x86_64 libstdc++ = 4.4.7-...
实例讲解C++友元,利用实例讲解C++友元的知识
简单的友元类使用,自己编的c++程序,可以作为模板。
主要讲解c++种的友元类友元函数 可以更好地学习其中的内容 友元在类中担任着十分关键的角色 所以更应该认真学习
关于c+模板之友元类友元函数的实例化,图形界面之矩形。
一个类A声明为一个类B的友元类之后,类A就可以任意访问类B的。。。
gcc-c++-4.8.5-39.el7.x86_64.rpm
C++友元习题.pdf
C++版本Savitzky-Golay 滤波器,包括序列噪声去除与插值等等。
gcc-c++-4.8.5-36.el7.x86_64.rpm 下载插件 rpm下载安装
mysql-connector-c++-1.1.7-linux-glibc2.5-x86-64bit.rpm 安装只需: rpm -ivh mysql-connector-c++-1.1.7-linux-glibc2.5-x86-64bit.rpm 即可
compat-gcc-44-c++-4.4.7-8.el7.x86_64.rpm
c++课程设计-个人收支管理系统 c++课程设计-个人收支管理系统 c++课程设计-个人收支管理系统 c++课程设计-个人收支管理系统 c++课程设计-个人收支管理系统 c++课程设计-个人收支管理系统 c++课程设计-个人收支管理...
linux gcc-c++-4.8.5-44.el7.x86_64.rpm
gcc-c++-4.4.7-3.el6.i686.rpm
暗黑风格-C++八股文-小贺-v1.0.pdf