我需要打印定期報告和批量報告。我正在使用podofo庫。我打算爲每個報告使用不同的類,但每個類都需要下面的一些通用函數(現在在另一個項目的一個類中)。假設沒有,將普通代碼移動到基類是否是一個好習慣?
int CPdfBatchReport::CalculateMaxRowsInEmptyPage(void)
{
int rows = MaxPageHeight/PDF_TABLE_STANDARD_ROW_HEIGHT;
// because the first will always be the column header in every page, we substrct 1 to account for that
rows = rows - 1;
return rows;
}
// Calculates the max rows in current page. The current page is determined
// by the current x, y position
int CPdfBatchReport::CalculateMaxRowsInCurrentPage(void)
{
float AvailablePageHeight = pPage->GetPageSize().GetHeight() - PDF_BOTTOM_MARGIN - y;
int rows = AvailablePageHeight/PDF_TABLE_STANDARD_ROW_HEIGHT;
// because the first will always be the column header in every page, we substrct 1 to account for that
rows = rows - 1;
return rows;
}
void CPdfBatchReport::StartPage(void)
{
x = PDF_LEFT_RIGHT_MARGIN;
y = PDF_TOP_MARGIN;
}
用這個通用代碼創建基類並在派生類中進行實際打印是否有意義?這是一個好習慣嗎?
所以基本上我會有基類說PrintBase
與它上面的函數和它的兩個派生類PrintBatchReport
和PrintItemReport
這實際上將使用這些函數。
謝謝,但我確實認爲我也會做基礎接口類。像基類上的'print()'方法一樣可以打印批處理報告或簡單報告。通過接口類,我的意思是它可以有純虛函數和常規函數,爲什麼這不好?它似乎會做的很好! – zar
對,所以真正的接口類和具有虛擬功能的常規基類是有區別的。真正的接口類沒有數據成員,也沒有實現的功能。一個可以有成員和實現函數的基類。只有當一個類繼承了多個基類(多重繼承)時,才真正需要擁有一個真正的接口類,此時沒有數據成員,只有未實現的函數纔有助於使接口「純」。 –
「繼承的構成」,我想 – ggrr