در برخی مواقع پیش می آید که می خواهید که تابعی که عضو یک کلاس نیست، بتواند به اعضای خصوصی آن کلاس دسترسی داشته باشد؛ در این مواقع میتوانید از "تابع دوست" استفاده کنید که با استفاده از کلمه ی کلیدی friend تعریف می شود. تابع دوست تابعی است که در داخل کلاس اعلان شده است ولی بدنه ی آن در خارج از تابع شده است و اجازه ی دسترسی به اعضای خصوصی کلاس را دارد.
در زیر مثال ساده ای از یک تابع دوست برای یک کلاس آمده است :

class Sample
{
public:
 // Friend function
 friend void Print (int );


private:
 int Val ;
}

در بالا یک کلاس با نام Sample تعریف شده است که دارای یک متغیر عضو و یک تابع دوست به نام Print است. این تابع عضو در داخل کلاس تعریف شده است و بدنه آن در بیرون تابع نوشته شده است.

void Print (int num)
{
  Sample Obj;
  Obj.Val = num;
  cout << Obj.Val;
}

تابع Print با اینکه عضو کلاس Sample نیست ولی به متغیر خصوصی Val دسترسی دارد. میتوانیم برای آزمایش این تابع کد زیر را به کار ببریم :

// main
Print (100);

چون تابع دوست، عضو یک کلاس نیست باید برای دسترسی به اعضای یک کلاس یک شی از آن کلاس را داشته باشیم یا اینکه اعضای کلاس به صورت static تعریف شده باشند. نکته ی مهم در توابع دوست این است که این توابع باید در داخل کلاس اعلان شوند (به صورت عمومی یا خصوصی فرقی ندارد) و در خارج از آن نوشته شوند. البته میتوان بدنه ی یک تابع دوست را نیز در کلاس قرار داد ولی برای استفاده از آن باید در تابع main نیز آن را اعلان کرد. در هر حال، تابع دوست، از اعضای کلاس به حساب نمی آید.