四、標準輸入輸出流
在C語言中,輸入輸出是使用語句scanf()和printf()來實現的,而C++中是使用類來實現的。
#include iostream.h
main() //C++中main()函數默認為int型,而C語言中默認為void型。
{
int a;
cout <
cin>>a; /*輸入一個數值*/
cout < return 0;
}
cin,cout,endl對象,他們本身并不是C++語言的組成部分。雖然他們已經是ANSI標準C++中被定義,但是他們不是語言的內在組成部分。在C++中不提供內在的輸入輸出運算符,這與其他語言是不同的。輸入和輸出是通過C++類來實現的,cin和cout是這些類的實例,他們是在C++語言的外部實現。
在C++語言中,有了一種新的注釋方法,就是‘//’,在該行//后的所有說明都被編譯器認為是注釋,這種注釋不能換行。C++中仍然保留了傳統(tǒng)C語言的注釋風格/*……*/。
C++也可采用格式化輸出的方法:
#include iostream.h
int main()
{
int a;
cout <
cin>>a;
cout
五、函數重載
在C++中,允許有相同的函數名,不過它們的參數類型不能完全相同,這樣這些函數就可以相互區(qū)別開來。而這在C語言中是不允許的。
1.參數個數不同
#include iostream.h
void a(int,int);
void a(int);
int main()
{
a(5);
a(6,7);
return 0;
}
void a(int i)
{
cout < }
void a(int i,int j)
{
cout < }
2.參數格式不同
#include iostream.h
void a(int,int);
void a(int,float);
int main()
{
a(5,6);
a(6,7.0);
return 0;
}
void a(int i,int j)
{
cout < }
void a(int i,float j)
{
cout < }
六、變量作用域
C++語言中,允許變量定義語句在程序中的任何地方,只要在是使用它之前就可以;而C語言中,必須要在函數開頭部分。而且C++允許重復定義變量,C語言也是做不到這一點的。看下面的程序:
#include iostream.h
int a;
int main()
{
cin >>a;
for(int i=1;i <=10;i++) //C語言中,不允許在這里定義變量
{
static int a=0; //C語言中,同一函數塊,不允許有同名變量
a+=i;
cout <<::a<< < }
return 0;
}
七、new和delete運算符
在C++語言中,仍然支持malloc()和free()來分配和釋放內存,同時增加了new和delete來管理內存。
1.為固定大小的數組分配內存
#include iostream.h
int main()
{
int *birthday=new int[3];
birthday[0]=6;
birthday[1]=24;
birthday[2]=1940;
cout < < delete [] birthday; //注意這兒
return 0;
}
在刪除數組時,delete運算符后要有一對方括號。
2.為動態(tài)數組分配內存
#include iostream.h
#include stdlib.h
int main()
{
int size;
cin >>size;
int *array=new int[size];
for(int i=0;i array[i]=rand();
for(i=0;i cout <<'\n'< delete [] array;
return 0;
}
八、引用型變量
在C++中,引用是一個經常使用的概念。引用型變量是其他變量的一個別名,我們可以認為他們只是名字不相同,其他都是相同的。
1.引用是一個別名
C++中的引用是其他變量的別名。聲明一個引用型變量,需要給他一個初始化值,在變量的生存周期內,該值不會改變。 & 運算符定義了一個引用型變量:
int a;
int & b=a;
先聲明一個名為a的變量,它還有一個別名b。我們可以認為是一個人,有一個真名,一個外號,以后不管是喊他a還是b,都是叫他這個人。同樣,作為變量,以后對這兩個標識符操作都會產生相同的效果。
#include iostream.h
int main()
{
int a=123;
int & b=a;
cout < a++;
cout < b++;
cout < return 0;
}
2.引用的初始化
和指針不同,引用變量的值不可改變。引用作為真實對象的別名,必須進行初始化,除非滿足下列條件之一:
(1) 引用變量被聲明為外部的,它可以在任何地方初始化
(2) 引用變量作為類的成員,在構造函數里對它進行初始化
(3) 引用變量作為函數聲明的形參,在函數調用時,用調用者的實參來進行初始化
3.作為函數形參的引用
引用常常被用作函數的形參。以引用代替拷貝作為形參的優(yōu)點:
引用避免了傳遞大型數據結構帶來的額外開銷
引用無須象指針那樣需要使用*和- >等運算符
#include iostream.h
void func1(s p);
void func2(s & p);
struct s
{
int n;
char text[10];
};
int main()
{
static s str={123,China};
func1(str);
func2(str);
return 0;
}
void func1(s p)
{
cout < cout< }
void func2(s & p)
{
cout < cout< }
從表面上看,這兩個函數沒有明顯區(qū)別,不過他們所花的時間卻有很大差異,func2()函數所用的時間開銷會比func2()函數少很多。它們還有一個差別,如果程序遞歸func1(),隨著遞歸的深入,會因為棧的耗盡而崩潰,但func2()沒有這樣的擔憂。
4.以引用方式調用
當函數把引用作為參數傳遞給另一個函數時,被調用函數將直接對參數在調用者中的拷貝進行操作,而不是產生一個局部的拷貝(傳遞變量本身是這樣的)。這就稱為以引用方式調用。把參數的值傳遞到被調用函數內部的拷貝中則稱為以傳值方式調用。
#include iostream.h
void display(const Date &,const char*);
void swapper(Date &,Date&);
struct Date
{
int month,day,year;
};
int main()
{
static Date now={2,23,90};
static Date then={9,10,60};
display(now,Now: );
display(then,Then: );
swapper(now,then);
display(now,Now: );
display(then,Then: );
return 0;
}
void swapper(Date & dt1,Date& dt2)
{
Date save;
save=dt1;
dt1=dt2;
dt2=save;
}
void display(const Date & dt,const char *s)
{
cout < cout< }
5.以引用作為返回值
#include iostream.h
struct Date
{
int month,day,year;
};
Date birthdays[]=
{
{12,12,60};
{10,25,85};
{5,20,73};
};
const Date & getdate(int n)
{
return birthdays[n-1];
}
int main()
{
int dt=1;
while(dt!=0)
{
cout < cin>>dt;
if(dt >0 && dt<4)
{
const Date & bd=getdate(dt);
cout < }
}
return 0;
}
相關推薦:
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |