返回:賀老師課程教學鏈結
談及運算,我們總是習慣「數」的運算。而實際上,像時間之類的物件也是可以進行加減運算的。再進一步,我們的思維還可以拓展,運算加以加到任何事物上,只要我們可以為這些「運算」設計好意義。
例如:有班級類和學生類。兩個學生相加,組成了乙個由兩個學生構成的班級;班級加學生,代表班級增加了一名新同學;學生乘學生,結果為這兩個學生「結對子」,可以做某些事(這個對子,需要定義成乙個新的類);班級乘班級,是班級中的所有學生,兩兩結對子的所以可能組合。
實際上,班級和學生,已經初步具備了資料庫中用「學生表」儲存學生資訊的特徵。一張「學生表」代表乙個班級,而這張表中的每一條「記錄」,則是具體的學生物件。
利用資料庫技術可以建立這張**,可以用操縱資料庫的語言(sql語言),完成對資料的相關處理。
這些處理,建立在資料庫理論基礎上。對於關係型資料庫(前述「學生表」,按術語講,就是乙個「關係」),其基礎是「關係代數」。關係代數,實際上就是定義了一組運算。無論這些運算用什麼樣的符號,可以與c++中過載後的運算子建立起聯絡來,讓我們一起體會一下,若用c++去實現資料庫最底層的運算,將可以採取什麼樣的策略。
更深一層,代數系統就是由乙個非空集合和一組運算構成的系統。這是任何計算模型(計算模型可以是通用的模型,更多我們強調的就是解決具體問題的計算模式),在本質上的描述。關係代數,只不過也就是代數系統中的乙個例子罷了。
所以,有機會「科班」學習計算機的同學,隨著課程的進展,借助離散數學(代數系統是這門課程中的一部分)、可計算性理論等,體會從最一般的、抽象的層面看待計算,這是形成專業思維的重要部分。
當然,在學習c++的時候,體會到「萬物皆物件,各種操作皆運算」,擺脫運算一定是施加於「數」上的觀念,可以有助於將未來要學習的抽象理論具體起來。大學的學習,達到理論聯絡實際很有必要。為此,本文的目標,就是讓菜鳥在接觸專業理論之前,至少隔著門縫看了一眼。
下面的**來點乾貨,學生加學生的運算,可以這樣實現:
#include using namespace std;
class student;
class class //班級類
;class student //學僧類
student(int n, string nam, char s, int a);
class operator+(student &s1);
};class::class():number(0),students(null) {}
class::class(const class &c)
{ number=c.number;
students=new student[number];
int i;
for(i=0;i進一步的拓展(請感興趣的讀者作為實踐題目):
定義了student s1, s2; class c1, c2; 後:
(1)你是否可以定義出支援c1+c2、c1+s1、c1-c2之類的運算?
(2)為s1*s2、s1*c1、c1*c2確定其含義,必要時增加新的型別定義,實現*運算子的過載?
(3)(更遠的未來)參考關係代數中對除法的定義,實現c1/s1、c1/c2運算?
《C 語言基礎》實踐參考 指向學生類的指標
返回 賀老師課程教學鏈結 專案4 指向學生類的指標 設計乙個學生類student,資料成員包括學號 num 和成績 score 成員函式根據需要自行設計 建議配備需要的set get函式,以及必要的輸入或輸出,給出的 中也可以找到需要成員函式的線索 在main函式中,要做到 下面給出部分程式,在此基...
C語言OJ專案參考 2878 學生資訊排序
description 定義存放乙個學生資訊的結構體型別,學生資訊包括 姓名,學號,性別,院系,要求在隨意輸入5個學生的相關資訊後,按照學號從小到大順序輸出這些學生的資訊。input 先輸入5名學生的資訊,按學號順序排序輸出後在輸入要統計的院系名稱 output 先按學號從小到大的順序輸出學生資訊 ...
《C 語言基礎》實踐參考 鍊錶類
返回 賀老師課程教學鏈結 專案要求 專案 鍊錶類 動態鍊錶也是程式設計中的一種非常有用的資料結構。可以說,是否能夠理解有關操作的原理,決定了你是否有資格稱為 科班 出身。在後續的專業基礎課中,相關的內容還會從不同的角度,反覆地認識,反覆地實踐。不過,在現階段多些體驗,也是很有必要的了。1 閱讀下面的...