`
tjmzgn
  • 浏览: 156091 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C++友元类------自己的不一定正确

    博客分类:
  • C++
阅读更多
/*预引用.告诉编译器类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();


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics