1、使用gcc編譯c++文件報錯
proc1.cc:(.text+0x14): undefined reference to `std::cout'
C++程序使用gcc命令只能編譯,不能鏈接庫文件
應該使用g++編譯
2、運行一個程序之後可以使用 echo $? 返回該程序返回值(main函數的返回值必須是一個int型的數值)
3、endl是一個特殊值,成為操縱符,將它寫入輸入流時,具有輸出換行的效果,並刷新與設備相關聯的緩沖區中。
調試過程中的輸入語句都應該使用endl刷新輸出流。
4、#include <iostream>
為預處理指示,標准庫使用 "< >",添加自己定義的頭文件時使用雙引號
#include "head.h"
5、c++程序中使用的每一個名字必須在使用之前聲明
6、
#include <iostream>
using namespace std;
int main(){
int temp;
int acount=0;
while(cin>>temp)
acount+=temp;
cout<<acount<<endl;
}
其中的while循環是一個死循環,當遇到文件結束符或者讀到的不是一個整型數的時候就會結束循環
windows中的文件結束符是 control+z ,Linux/Unix中文件結束符是 control+d
7、一般將一個類的定義放到一個文件中(.h 頭文件),要使用該類就要包含這個文件
每個類定義一個類型,類型名與類名相同
8、c++中的數據類型中,整型值short、int、long存儲空間不同,一般的short為機器字長的一半,int為機器字長,long類型為一個或者兩個機器字長(在32位機器中int類型和long類型通常字長是相同的,都為4個字節,long類型的數字表示2^32為-2147483648)。short、int、long默認都為帶符號整數。
c++中的float類型浮點數默認保留6位有效數字,double默認保留10位有效數字
9、0開頭的字面值常量表示八進制數字,0x開頭表示16進制數字。定義long類型數據時應該在數值的後面加上“L”表示long類型數值
10、為了兼容C語言,c++中所有字符串字面值都有編譯器自動在末尾添加一個空字符。
寬字符串:
11、c++中標識符不能包含兩個連續的下劃線,也不能以下劃線開頭後面緊跟一個大寫字母
命名習慣:變量名一般用小寫字母,標識符包含多個單詞書寫為在每個詞之間添加一個下劃線,或者每個內嵌的詞的第一個字母都大寫(駝峰式)
12、
int ival(1024); // 直接初始化
int ival = 1024; // 復制初始化
c++中的初始化分為直接初始化和復制初始化,直接初始化更靈活且更加高效。對內置類型來說,復制初始化與直接初始化是沒有區別的,都是提供一個值並把這個值復制到新定義的對象中。對類類型的對象來說,有些初始化僅能使用直接初始化來完成。
內置類型變量自動初始化:函數體外定義的內置類型變量自動初始化為0,函數體內的內置類型變量不自動初始化
類類型變量初始化:通過定義一個或多個構造函數控制類對象的初始化
c++中的初始化應該理解為 “創建對象並賦值”
13、c++區分聲明與定義:
變量的定義用於為變量分配內存空間,還可以為變量指定初始值,在一個程序中,變量有且僅有一個定義。通常把一個對象定義在它首次使用的地方是一個很好的辦法
聲明用於向程序表明變量的類型和名字。定義也是聲明,當定義變量時我們聲明了它的類型和名字。通過使用extern關鍵字聲明變量名而不定義它。不定義變量的聲明包括對象名、對象類型和對象類型前的extern:
extern int i; // 聲明但沒有定義i
int i; // 聲明並定義i
extern聲明並不是定義,也不分配存儲空間,事實上,它只是說明變量定義在程序的其他地方。程序中變量可以聲明多次,但只能定義一次。
只有當extern聲明位於函數外部時,才可以含有初始化式。
14、作用域:定義在所有函數外部的名字具有全局作用域,可以在程序任何地方訪問。
局部作用域在一個函數內部,函數外部不能訪問局部作用域。c++中作用域可以嵌套,局部作用域變量可以屏蔽全局作用域變量
c++中還有另外兩種作用域:類作用域,命名空間作用域
15、const對象默認為文件的局部變量:
在全局作用域中定義非const變量時,它在整個程序中都可以訪問,我們可以把一個非const變量定義在一個文件中,假設已經做了合適的聲明,就可以在另外的文件中使用這個變量:
// file_1.cpp
int counter; // 定義
// file_2.cpp
extern int counter; // 使用file_1中的counter
++conuter; // 定義在file_1中的counter自增
與其他變量不同,除非特別說明,在全局作用域聲明的const變量是定義該對象的文件的局部變量,此變量只存在與那個文件中,不能被其他文件訪問。通過指定const變量為extern,就可以在整個程序中訪問const對象。
非const變量默認為extern,要使const變量能夠在其他文件中訪問,必須顯示的指定為extern
16、引用就是對象的另一個名字,引用主要用作函數的形式參數
引用是一種復合類型,通過在變量名前面添加“&”符號來定義。在引用的情況下,每一種引用類型都“關聯到”某一其他類型。不能定義引用類型的引用
引用必須用與該引用同類型的對象初始化:
int ival = 1024;
int &refVal = ival; // refVal引用ival
int &refVal2; // 錯誤,引用必須初始化
int &refVal3 = 10; // 錯誤,引用必須用對象初始化
不可能將引用綁定到另一個對象,初始化是指明引用指向哪個對象的唯一方法。
const引用:
const引用是指向const對象的引用:
const int ival = 1024;
const int &refVal = ival; // 對象與引用都是const
int &refVal2 = ival; // 錯誤,非const引用指向const對象
const引用可以初始化為不同類型的對象或者初始化為右值(字面值常量):
int i = 1024;
const &ref = 42;
const &ref2 = r+i;
const引用可以綁定到一個非const對象上,這樣引用本身就是只讀的,而且一直指向這個對象,但是對象的值卻可以通過操作對象本身改變
#include <iostream>
using namespace std;
int main(){
int i = 1024;
const int &ref = i;
cout<<"ref="<<ref<<endl; // 1024
cout<<"i="<<i<<endl; // 1024
i = i+1;
cout<<"ref="<<ref<<endl; // 1025
cout<<"i="<<i<<endl; // 1025
}
17、typedef double wages; // 類型別名,強調使用類型的目的
18、枚舉(enum):
enum open_modes {input, output, append};
默認的,第一個枚舉成員賦值為0,後面的每個枚舉成員賦的值比前面的大1.
enum Forms {shape = 1, sphere, cylinder, polygon }; // 顯示賦值:shape = 1, sphere = 2, cylinder = 3, polygon = 4
賦值: Forms f = shape;
枚舉成員可以是不唯一的
enum Points {point2d = 2, point2w, point3d = 3, point3w };
19、類類型:每個類都定義了一個接口和一個實現。接口由使用該類的代碼需要執行的操作組成。實現一般包括該類所需要的數據和定義該類需要但又不供一般使用的函數。
類定義首先定義類的接口!!!*******花括號後面必須要跟一個分號******!!!
class Sales_item {
public:
// 定義Sales_item對象的操作
private:
std:string isbn;
unsigned units_sold;
double revenue;
};
定義變量與定義數據成員的區別:一般不能把類成員的初始化作為其定義的一部分,當定義數據成員時,只能指定該數據成員的名字和類型。類不是在類定義數據成員時初始化數據成員,而是通過構造函數控制初始化。
20、struct與class關鍵字定義類的唯一區別在於默認訪問級別不一樣,默認情況下struct的成員為public,而class的成員默認為private
21、c++中的頭文件:
頭文件為相關聲明提供了一個集中存放的位置,頭文件一般包含類的定義、extern變量的聲明和函數的聲明。
為了減少處理頭文件的編譯時間,有些c++的實現支持預編譯頭文件
頭文件用於聲明而不是用於定義(定義就是有存儲空間分配,初始化或者不含extern關鍵字都視為定義)
因為頭文件包含在多個源文件中,所以不應該含有變量或者函數的定義(定義只可以出現一次)
頭文件不應該有定義的三個例外:頭文件可以定義類、值在編譯時就已知的const對象和inline函數,這些實體可以在多個源文件中定義,只要每個源文件中的定義是相同的(如果const變量不是用常量表達式初始化,那麼它就不應該在頭文件中定義)
22、c++預處理:
頭文件中經常#include到其他頭文件,預處理器用指定的頭文件的內容代替每個#include
為了保證多次包含同一個頭文件不會引起該頭文件定義的類和對象被多次定義,就要使用與處理器定義頭文件保護符,頭文件保護符用於避免在已經見到頭文件的情況下重新處理該頭文件的內容
避免多重包含:
為了避免名字沖突,與處理器變量經常用全大寫字母表示。與處理器變量有兩種狀態:已定義和未定義。定義預處理器變量和檢測其狀態所用的與處理器指示不同。#define指示接受一個名字並定義該名字為預處理器變量。#ifndef指示檢測指定的預處理器變量是否為定義。如果預處理器變量未定義,那麼跟在其後的所有指示都被處理,知道出現#endif。
#ifndef SALESITEM_H
#define SALESTIEM_H
// 添加Sales_item 類和相關函數(頭文件中的內容)
#endif
其實所有語言都是想通的。。。C++吧。。首先你要知道
0.三種程序結構。。循環分支順序
1。數據類型,定義及使用
2.數組的定義及使用。。作為函數參數。。。函數返回值啥的。。
3函數的定義級使用。。參數,,返回值。重載。。啥的。。
4.指針含義,使用,定義。作為函數參數,,函數返回值啥的。。。
5結構的定義即使用 指針
6.頭文件的作用。。使用方法
7接著就該類了、屬性,,函數。。重載。。遞歸的使用
8類的繼承。。派生。。多態。。裡面有啥虛函數。。虛基類。。
這些算基礎吧。高深的,我沒怎麼接觸。。希望能幫到你
可以直接購買一本書籍的 推薦<object-c基礎教程>
300多頁兩三天就能看完
基礎知識 一般情況我不總結的,只有我不懂的 我才總結一下(沒有)