程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++編程思想1

C++編程思想1

編輯:C++入門知識

學了好久的 C++了 發現自己對於C/C++還是沒有深入的了解 於是 咬咬牙啃起了 C++編程思想 希望能有所感悟 。。
我以前是直接學C++的對於C不是很了解,然而又是在VC下 學習 所以 沒有好好的 去學習 標准C++,直到我 看起C++編程思想  我發現真應該從頭再學一遍了  。。。
 
1、定義的聲明的區別  :
聲明是 聲明了標示符的存在 並沒有為 其分配空間   ,而定義 是為其分配的一定的存儲空間
int * p ;//這是對指針的聲明 並且定義
int p;//這是對整形變量的聲明並且定義
exern void show() ;==void show() ;
對於函數來說只要沒有函數體 那麼都是聲明  extern 表示對函數的聲明 表示這個函數是再外部定義的 。
我們在編譯器下 同時寫下
int i;
int i ;//會出現沖的定義的錯誤    編譯器會理解為"我到底改用那個i呢?"
 
extern int i ;
int i ;//那麼就不會出現錯誤 原因是 第一個i是一個對於變量的聲明 並沒有分配存儲空間  第二次 才為 i分配了存儲空間
 
2、  memcpy 函數  void *memcpy( void *dest, const void *src, size_tcount );
這個函數我們在C中經常用到  ,其實 他 跟 strcpy很類似 都是向目的類型的地址 拷貝 n個 內存塊
注意這裡的參數是 void*    因為我們是對內存塊進行操作  所以可以是任意數據類型
程序員對於內存的理解應該一視同仁 沒有類型的區別 。 只是我們在使用內存的時候 將二進制代碼 進行了 數據化了
3、  malloc函數和 calloc函數    assert函數
void *malloc( size_t size);
void *calloc( size_t num, size_tsize );
void assert( int expression );  //如果參數是FALSE那麼 強制終止程序的運行  也就是 非0 退出
這兩個函數都是在堆中分配指定大小的void* 內存區域    只是calloc可以進行初始化  
而 malloc函數不進行初始化  。當malloc函數分配的內存在 第一次被使用的時候 那麼 它的每個單元的數據可能是  0
但是 如果分配來的這塊內存區域被使用過了 那麼就可能使任意數了 。
這裡我們會問free函數 做什麼了?
free函數 只是告訴編譯器 我們之前用malloc分配的內存區域 可以重復使用而已,在一定程度上可以理解為釋放
 
現在想想 我們的 fopen 函數和 fclose函數 所  用到的  FILE結構體也是 由此 而來的
4、標准庫的發放形式
  我們在 VC中用到  string.h  等等頭文件 就可以使用裡面定義的函數 等等     我們可以找到 String.h  但是我們卻找不到他的實現文件 CPP (也就是源文件)
在以往的C庫的編寫中我們通常 將具有 統一功能 和 分類的 一組 數據類型 和函數放在一個 頭文件中定義   ,然後再原文件中實現 。然而我們到 微軟提供的VC下面卻找不到 這些對應文件的實現  。這是因為對於 微軟而言 我們是使用VC的用戶 ,雖然我們是軟件開發者,但是我們是在微軟的平台下使用。 
微軟給我提供了的借口是 頭文件+動態鏈接庫的 形式  而不是 頭文件+源文件的形式 。
對於微軟而言 不會給我們 庫的實現部分 。只需要給我們提供動態鏈接庫,我們就可以使用它們所定義的函數 以及類型
 
5、重復定義的問題 
    #ifndef test  
#define final
#endif
 
在一個較大的工程中我們可能會用到多個頭文件  架設 我們在多個頭文件中同時包含了 一個頭文件 那麼 在 編譯器進行編譯鏈接的時候
就會發生 數據類型或者 函數的 重復定義問題 為了解決這個問題 那麼我們要用到 預編譯指令
如果在  lib.h的頭文件下有 int i ; 為了防止被重復定義 那麼 我們在 lib.cpp中應該這樣定義
#ifndef  lib_H_
int  ;
#endif  ;
這樣就可以防止統一數據 被重復定義的問題
 
6、  C++的封裝
C++的封裝  這是一個歧義的問題?
有些人把封裝用在解釋隱藏上 ,而我覺得用來解釋類這一個抽象數據類型很合適  、
在以前的C中  struct 結構體中我們吧 一組相關的 屬性組合成一個結構體  那麼這個結構體 只是作為數據的封裝,沒有其他的實際意義。
但是在C++中則不同了。
類中可以加入函數 ,等操作行為 使面向對象的思想得以很好的實現,一個類代表一類事物,一個類的實例代表一個對象 ,這個對象有自己的屬性和行為 。
我們把操作的函數封裝在類中 也可以避免C中函數命名重復的問題 。
 
 6、聯合 Union  枚舉  enum的簡單實用
  對於聯合 來說他的大小是成員中數據類型字節最大的存儲 我們在使用的時候 使用數據類型中的一個 可以節約存儲空間
enum其實定義的是基於 0開始的 一些數據成員 當然我們可以對枚舉成員進行賦值 簡單應用如下
#include <iostream>
using namespace std ;
enum Day
{
 one =433,
 two ,
 three
};
union Me
{
  int a ;
  char buf[100]  ;
};
void main()
{
     Day a =one;
  Day b= two ;
  cout<<a<<endl ;
  cout<<b<<endl ;
  Me me1,me2 ;
  me1.a=100 ;
  strcpy(me2.buf,"dsfds") ;
  cout<<"Union中的數字:"<<me1.a<<endl ;
  cout<<"Union中的字符串:"<<me2.buf<<endl;
  cout<<"Union的大小是:"<<sizeof(Me)<<endl ;

}
 摘自 yue7603835的專欄

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved