所以我想宣告一個函式func(temp t1, temp t2)并在類 temp中使用它。但我不想將它定義為temp 類的成員函式,主要是因為我希望其他函式能夠在不使用temp的任何物件的情況下訪問func。我知道可以通過將func()宣告為temp的朋友,但是有沒有辦法為temp宣告一種原型,以便我可以將它用作非成員函式temp的引數,然后再定義它?
template<typename Type>
class record
{
public:
Type data;
/*....some other memebers...*/
friend int rec_comp(const record& r1, const record& r2)
{
}
bool operator==(const record& r1, const record& r2)
{
if(rec_comp(r1, r2)==0)
return true;
else
return false;
}
/*...similar implementation for other relational operators ...*/
};
我想在類外宣告函式rec_comp。
uj5u.com熱心網友回復:
對的,這是可能的。下面給出一個例子:
函式.h
#pragma once
//declaration for class temp
class Temp;
//declaration for function func
void func(Temp t1, Temp t2);
函式cpp
#include "func.h"
#include "temp.h"
#include<iostream>
//implementation for function func
void func(Temp t1, Temp t2)
{
std::cout<<"func called"<<std::endl;
//do something with t2 and t2
}
溫度.h
#pragma once
//class definition
class Temp
{
int i = 0;
public:
//default constructor
Temp();//this is a declaration
};
溫度.cpp
#include "temp.h"
#include <iostream>
//definition for default constructor
Temp::Temp()
{
std::cout<<"default constructor called"<<std::endl;
}
主檔案
#include <iostream>
#include "func.h"
#include "temp.h"
int main()
{
Temp t1, t2;
//call func
func(t1,t2);
return 0;
}
上述程式的輸出可以在這里看到。
編輯
由于您已經編輯了您的問題,以下是您編輯的問題的答案。
template<typename Type>
class record
{
public:
Type data;
//NOTE: rec_comp is NOT A MEMBER FUNCTION
template<typename U, typename V> friend int rec_comp(const record<U>& r1, const record<V>& r2); //THIS IS A DECLARATION
};
//THIS IS A DEFINITION
template<typename U, typename V>
int rec_comp(const record<U>& r1, const record<V>& r2)
{
return 5;
}
uj5u.com熱心網友回復:
有沒有辦法宣告一個 clss,然后在 C 中定義它?
是的。只需省略類定義的大括號分隔主體即可獲得非定義宣告。這是一個類的宣告:
class temp;
將 func() 宣告為朋友
將函式宣告為類的朋友僅在允許朋友函式訪問類的受保護和私有成員和基時有用。
所以我想宣告一個函式 func(temp t1, temp t2) 并在 temp 類中使用它。
在宣告函式之前宣告類(沒有定義)確實有效。但這不是絕對必要的。也有效的替代順序:
- 定義
temp - 宣布
func temp定義該用途的成員函式func
但是,我確實推薦先宣告類的方法。通過遵循宣告類、宣告函式、定義類、定義函式的模式,通常最容易找到正確的順序。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/411690.html
標籤:
下一篇:回傳具有更大引數的物件
