C程序員要學C++嗎?

最近網友問到這一問題,但我更希望被問的是“C程序員需要學面向對象編程嗎?”,那就讓我先從回答這一問題開始,并做適當的擴展。


就我的成長經歷來看,C程序員必須學習面向對象編程!面向對象編程語言有其天然的一個優勢 — 將軟件世界的一切象現實世界那樣視為對象。我在《專業嵌入式軟件開發》一書的《設計,質量之本》一章中指出,軟件設計的一個原則是“以人為本”,在軟件世界中構建現實世界就能很好地貫徹這一原則,而對象在編程語言中的引入提供了設計便利性。對象的引入使得編程語言具有更具結構化的表達能力,這有助于提高程序的可維護性。


從C程序員的角度來看,通過使用對象能讓程序更具模塊性,而模塊化是我們所倡導的很重要的軟件開發方法之一。一旦掌握面象對象編程,C程序員的設計能力通常會有較大幅度的提升。這種提升使得即便是用C語言編程也能寫出更具模塊化的代碼。這是我主張C程序員一定要學習面向對象編程的根本原因。


然而,盡管面向對象編程這種方法有其優勢,但學習起來并不那么的容易,尤其對于從C語言過渡到C++的程序員。學習的第一個難點在于,面象對象編程與面向過程編程(指C語言)具有完全不同的思維方式。其差異性類似于對于使用拼音輸入法的人來說第一反應是為字拼音,而使用五筆輸入法的第一反應卻是將字拆成字根。象練習五筆輸入法那樣,學習面向對象編程需要一定的時間通過模仿和實踐去掌握面向對象的思維方法。在沒有掌握面向對象編程方法之前,我們會認為它比面象對象編程復雜,且覺得很繞。然而,一旦掌握,你會發現它又是那樣的自然。


學習的第二個難點,在于C++語言本身上。C++編程語言應是最復雜的系統編程語言,這可從《Effective C++》、《More Effective C++》、《Exceptional C++》和《More Exceptional C++》等書加起來有近200個編程規則可以看出。語言的復雜性增加了掌握它的難度。如果不使用像pc-lint這樣的靜態分析工具,我們很難寫出專業的C++程序。


除了C++語言本身的復雜性,C程序員在轉向C++時,由于C++對C語言語法的兼容,使得我們容易犯使用C++編寫面向過程程序的錯誤。這在某種程度上不利于我們更快地掌握面向對象編程。


優雅的編程語言有助于收斂我們的編程行為,從而寫出更好的程序。但真正決定程序可讀性的,是程序員的邏輯思維是否清晰和表達是否精確。再好的編程語言,邏輯混亂和表達不精確的程序員一定會將程序寫成“狗皮膏藥”。從這一點來看,盡管C++倍受爭議,但還是值得C程序員去掌握。另外,在一個C項目上我們可以無縫地使用C++,相信這是C程序員選擇C++很重要的原因。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/449885.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449885.shtml
英文地址,請注明出處:http://en.pswp.cn/news/449885.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

追女生心理研究(本人母胎單身,就是想做準備,并無其他意思)

聊天話題: 1。興趣愛好:美食,旅游,寵物等 2。現在和曾經的自己,分享自己的經歷 3。我變成我們,未來規劃 4。分析隱私,比如一些小秘密 5。價值觀,對未來的規劃等 聊天話題技巧 …

dlopen 和 dlsym 動態調用函數

Linux/unix 提供了使用 dlopen 和 dlsym 方法動態加載庫和調用函數,這套方法在 macOS 和 iOS 上也支持。dlopen 打開一個庫,獲取句柄。dlsym 在打開的庫中查找符號的值。dlclose 關閉句柄。dlerror 返回一個描述最后一次調用dlopen、dlsym,或…

通過騰訊地圖服務獲取行政區劃信息

接口說明地址: https://lbs.qq.com/webservice_v1/guide-region.html 以下是源代碼及表創建腳本。 源碼及相關文件下載轉載于:https://www.cnblogs.com/challengesoflife/p/10405366.html

情感學習聊天方法

1.非正常聊天法 出人意料的聊天技巧,展示幽默感,讓對方對自己產生興趣 比如對方說:你的朋友圈好多美女啊。回答還好了,沒有了。場面會一度尷尬 但可以這么說:你這樣是在間接夸自己是美女。或者:還好啦&a…

面向對象設計的優點

一旦明白了軟件設計的真諦(參見《軟件設計的真諦》),我們就更能理解面向對象設計的優點。簡單說來,它更便于我們在軟件中構建更真實的虛擬世界。 首先,對象的引入方便了在軟件虛擬世界中模擬現實世界。現實世界是由很…

利用SVD-推薦未嘗過的菜肴2

推薦未嘗過的菜肴-基于SVD的評分估計 實際上數據集要比我們上一篇展示的myMat要稀疏的多。 from numpy import linalg as la from numpy import * def loadExData2():return[[0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 5],[0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 3],[0, 0, 0, 0, 4, 0, 0, 1, 0,…

在圖像中截取小圖并保存

實現以橫向步長step_row、縱向步長step_col&#xff0c;在一幅大圖上剪裁寬度為width、高度為height的小圖像&#xff0c;圖像命名形式為“數字(遞增)_大圖名”格式&#xff0c;將小圖保存在argv[6]的文件夾中。 #include <opencv2/opencv.hpp> #include <string> …

Linux 文件與目錄管理、ls、cd、pwd、mkdir、rmdir、cp、 rm

見&#xff1a;http://www.runoob.com/linux/linux-file-content-manage.html我們知道Linux的目錄結構為樹狀結構&#xff0c;最頂級的目錄為根目錄 /。 其他目錄通過掛載可以將它們添加到樹中&#xff0c;通過解除掛載可以移除它們。 在開始本教程前我們需要先知道什么是絕對路…

軟件設計的真諦

假設我們身邊的一切都是用制造材料加以描述的&#xff1a;“空調”不是“空調”&#xff0c;而是“由金屬和塑料做成的物體”&#xff1b;“書”不是“書”&#xff0c;而是“由纖維和墨做成的物體”。溝通時我們也不用“空調”和“書”這樣的詞匯&#xff0c;而是“金屬和塑料…

脫單特質

1.上進心 所有人都想過好日子&#xff0c;物質不行&#xff0c;一定要有上進心&#xff0c;可以做出未來給予 2.外在形象 注重打理外在形象&#xff0c;所有人都是愛美的 3.無法控制自己&#xff0c;同時不去了解女生 控制住自己&#xff0c;才有更多的時間去了解和思考女…

云棲社區云棲號(團隊博客)攻略【2018版】

云棲社區云棲號是什么&#xff1f; 這是一個為技術團隊打造的專區&#xff08;小站&#xff09;&#xff0c;團隊成員的技術文章將在這里匯總&#xff0c;可以幫助團隊沉淀優質技術內容、打造技術品牌和影響力等。 云棲號申請條件 點擊https://yq.aliyun.com/teams頁面右側的【…

1030 完美數列 (25 分)二分

1030 完美數列 &#xff08;25 分&#xff09;給定一個正整數數列&#xff0c;和正整數 p&#xff0c;設這個數列中的最大值是 M&#xff0c;最小值是 m&#xff0c;如果 M≤mp&#xff0c;則稱這個數列是完美數列。 現在給定參數 p 和一些正整數&#xff0c;請你從中選擇盡可能…

兩性位置

男生不被女生當回事&#xff0c;在自己身上&#xff0c;需要從自身找原因 1.過度看重對方&#xff0c;會讓對方看輕自己 2。氣場比較弱&#xff0c;本身實力弱&#xff0c;會讓對方俯視自己 3.太過善良&#xff0c;一昧遷就&#xff0c;會導致自己失去生活重心&#xff0c;讓…

高質高效軟件開發組織能力模型

背景至今&#xff0c;我在Motorola網絡部工作超過了5年&#xff0c;所在的產品線也是采用統一軟件開發過程和敏捷思想(但不是SCRUM)來組織軟件開發活動的&#xff0c;但這5年多的工作經歷從未引起我象微博上對于SCRUM話題的激烈討論這樣的思考。原因之一可能是&#xff0c;公司…

python并發編程之多線程

多線程 線程 1.什么是線程 進程是一個執行空間 , 線程就是其中真正工作的單位 , 每一個進程至少有一個線程(如果我們把操作系統比喻為一個工廠 , 進程就是車間 , 線程就是流水線) 進程包含了運行該程序所需要所有資源 , 進程是一個資源單位 , 線程是CPU的最小執行單位 每一個進…

JavaScript幾個難點

1. 立即執行函數 立即執行函數&#xff0c;即Immediately Invoked Function Expression (IIFE)&#xff0c;正如它的名字&#xff0c;就是創建函數的同時立即執行。它沒有綁定任何事件&#xff0c;也無需等待任何異步操作&#xff1a; (function() { // 代碼 // ...})(); f…

真格量化學習

真格量化學習使用 期權的量化回測 引入必須的庫: from PoboAPI import * import datetime import time import numpy as np初始化參數設定 以50為例 def OnStart(context) :print("I\m starting...")#設定一個全局變量品種,本策略交易50ETF期權g

智能小程序檔案館——如何給“包”瘦身

上傳小程序代碼的時候包體積太大不知如何是好&#xff1f;小程序打開速度慢&#xff0c;流量耗費大不知如何優化&#xff1f;在今天的文章里&#xff0c;我們一起來討論一下如何給“包”瘦身。 為什么要限制包的大小&#xff1f; 我們都知道小程序作為一種 Hybrid 的解決方案&a…

軟件架構師的能力與特質

軟件開發工程師的職業發展無非兩大類&#xff1a;一是做“官”&#xff0c;從事管理工作&#xff1b;二則繼續從事技術工作。對于后者&#xff0c;軟件架構師&#xff08;software architect&#xff09;是很多軟件開發工程師追求的理想崗位。在這我想談一談軟件架構師所需的幾…

IntelliJ IDEA編碼設置

見&#xff1a;https://www.cnblogs.com/winner-0715/p/6364306.html項目中為了避免亂碼等問題應該使用UTF-8編碼方式,其實把編碼方式設置成UTF-8是創建完項目后就要做的事,按照如圖所示進行設置&#xff1a;這里要將Transparent native-to-ascii conversion選項勾選, 否則項目…