c++中友元函数前置
时间: 2024-05-11 10:10:01 浏览: 16
C++中的友元函数前置声明是指在类中声明一个函数为友元函数,以便该函数可以访问该类的私有成员。在类中声明友元函数时,需要在函数名前加上关键字“friend”,并在类的声明中进行前置声明。这样,即使该函数在类的定义之后,也可以正常使用。友元函数前置声明的语法格式如下:
class MyClass {
friend void myFriendFunction(); // 前置声明友元函数
};
需要注意的是,友元函数前置声明只是告诉编译器该函数是该类的友元函数,但并不会定义该函数的实现。因此,在类的定义之外还需要定义该函数的实现。
相关问题
c++ 中友元函数的用法
C++中的友元函数是指可以访问类的私有成员的非成员函数。友元函数可以在类定义中进行声明,并在类外进行定义。其主要用途是提高程序的封装性和安全性。友元函数的声明格式为:friend 返回值类型 函数名(参数列表);友元函数的定义格式为:返回值类型 类名::函数名(参数列表){ }。可以通过使用友元函数来访问类的私有成员,但需要注意的是过度使用友元函数可能会降低类的封装性和安全性。
#include<iostream> using namespace std; class student { public: //友元函数可以访问类中的公有和私有成员,不可以访问保护成员 friend void func2(student& s); friend class teacher; int a = 10; student(int x); ~student(); void func3(); private: int b = 20; }; student::student(int x) :a(x) { cout << "student 构造函数调用1" << endl; } student::~student() { cout << "student 析构函数调用!" << endl; } void student::func3() { cout << b << endl; } class teacher { public: int a = 1; student p; teacher(int a); ~teacher(); }; teacher::teacher(int a) { cout << "teacher构造函数调用" << endl; this->a = a; // p = new student(100); } teacher::~teacher() { cout << "teacher析构函数调用" << endl; // delete p; } void func1() { student s1(100); cout << s1.a << endl; s1.func3(); func2(s1); cout << s1.a << endl; } //友元函数,全局函数做友元 //在形参中加入const防止传入的参数被改变,不加const则可以改变 void func2( student &s) { //传入普通类对象不可以改变类中的值,只能改变形参类的值 /*s.a = 123; cout<<s.a << endl; cout << s.b << endl;*/ ////传入指针可以改变类的值 /*s->a = 1000; s->b = 123; cout << s->a << endl; cout << s->b << endl;*/ ///传入引用也可以改变类中的值 //s.a = 12345; //s.b = 123456; cout << s.a << endl; cout << s.b << endl; } //类做友元 void func3() { student s1(10); cout << s1.a << endl; teacher t1(100); cout << t1.a << endl; //t1.p->a = 123456; cout << t1.p.a<< endl; } int main() { //成员函数做友元 //func1(); //类做友元 func3(); system("pause"); return 0; }
这是一个 C++程序,它包含了一个名为student的类、一个名为teacher的类和三个全局函数func1、func2和func3。其中,student类中定义了一个友元函数func2和一个私有成员变量b,teacher类中定义了一个student类型的成员变量p和一个构造函数和析构函数,func1函数中创建了一个student对象s1并调用了它的成员函数func3和友元函数func2,func2函数中以传引用的方式接收一个student对象并输出它的公有成员变量a和私有成员变量b的值,func3函数中创建了一个student对象s1和一个teacher对象t1并输出它们的公有成员变量a的值。整个程序的功能是展示了C++中友元函数、友元类和成员函数做友元的用法。