- C++中的新特性
1.1 const
1.1.1 被修飾的是有類型的常量.
1.1.2 const char* : const在的左邊 : 指向的內容不可修改
1.1.3 char const : const在*的右邊 : 指針自身的內容不可修改(指針不能指向其它地址)
1.2 inline : 內聯函數.和宏+函數差不多,由編譯器自動優化.
1.3 新的內存申請和釋放: new 和 delete
1.3.1 new , new[] 和 delete , delete[]
1.4 函數重載
1.4.1 要求 : 函數名一樣,形參的個數,類型,順序有一個必須不一樣. 且不能通過返回值類型來區分重載.
1.4.2 名稱粉碎機制
1.4.3 防止名稱粉碎機制: extern"C"
1.5 默認形參
1.5.1 定義的規則 : 從右往左,不能有間隔.
1.6 引用
1.6.1 不占內存
1.6.2 是變量的別名
1.6.3 必須初始化
1.6.4 不能再引用其它的變量.
1.7 類型轉換
1.7.1 const_cast : 去除常量屬性
1.7.2 static_cast : 用于做隱式轉換的
1.7.3 reinterpret_cast : 強制類型轉換. - 輸入和輸出
2.1 cout
2.2 cin
2.3 格式化輸入輸出的標志
2.3.1 hex , dec , oct
2.3.2 setw , setfill
const
include <cstdio> //#include <stdio.h>
include <cstdlib>
include <cstring>
struct MyStruct {
int nNum;
};
// const常量
// 1. 主要用于修飾形參
// 如果形參是指針, 應當優先考慮給指針參數加上const限定符
// 內聯函數:使用inline關鍵字
inline void fun(const MyStruct* pObj ) {
printf( "%d" , pObj );
}
void fun( const char* pStr ) {
printf( "%s" , pStr );
}
// 函數重載 : 運行存在同名的函數
void fun( ) {
printf( "無參的fun\n" );
}
// 取消名稱粉碎機制(c++獨有): extern"C"
extern"C"
{
int max( int l , int r ) {
return l > r ? l : r;
}
int min( int l , int r ) {
return l < r ? l : r;
}
}
// 默認形參
void fun( int n1 =0, int n2 =0, int n3 =0, int n4=0 ) {
}
int main( int argc , char** argv )
{
fun( 1,2);
// C++中的內存申請和釋放:
int* pNum = new int; // 申請了1個int型(4字節)內存
// 申請了1個int型(4字節)內存,并初始化為0
int* pNum1 = new int(0);
// 釋放內存
delete pNum1; pNum1 = NULL;
delete pNum ; pNum = NULL;
// 申請一個結構體大小的內存空間
MyStruct* pStc = new MyStruct;
// 申請10個結構體大小的內存空間.
MyStruct* pStc1 = new MyStruct[10];
fun( );
fun( "hello\n" );
//fun( 10 );
fun( pStc );
delete[ ] pStc1; pStc1 = NULL;
delete pStc; pStc = NULL;
}
引用
include <stdio.h>
include <stdlib.h>
void swap( const char** p1 , const char** p2 ) {
const char* temp = *p1;
*p1 = *p2;
*p2 = temp;
}
void swap( const char& p1 , const char& p2 ) {
const char* temp = p1;
p1 = p2;
p2 = temp;
}
int main(int argc , char* argv[] ) {
const char* pLeft = "hello" ;
const char* pRight = "world";
swap( &pLeft , &pRight ); // 交換
swap( pLeft , pRight );
// 定義一個引用類型的變量
int nNum = 0;
int* pNum = &nNum;
// 定義了一個整型變量的引用
int& rNum = nNum;
// 定義了一個整型指針變量的引用
int*& rpNum = pNum;
int n2 = 100;
rNum = n2;
return 0;
}
類型轉換
include <stdio.h>
include <stdlib.h>
int main(int argc , char* argv[] ) {
const char* pcStr = "hello";
char* pStr = NULL;
pStr = (char*)pcStr;
// c++類型轉換格式:
// 類型轉換關鍵字<目標類型>(待轉換的表達式)
// const_cast : 專門用于取出const屬性的
// pStr <<== pcStr X
//
// 轉換前, pcStr是常量指針,指向的內容不可修改,指向"hello word"字符串
// 轉換后,pcStr性質不變
// 轉換前, pStr是一個指針 , 指向NULL
// 轉換后 , pStr是一個指針,指向"helloworld",指向的內容在語法上可以修改,
// 實際修改的時候程序會出錯.
pStr = const_cast<char*>( pcStr );//等價于pStr = (char*)pcStr;
char ch = (int)100; // char <<== int
// static用于將基本數據類型進行相互間轉換的
// 例如: int轉char, char轉int
ch = static_cast<char>( 100 );// 等價于ch=(int)100
pStr = "123456";
int* pNum = (int*)pStr;
// 重新解釋的類型轉換形式: 用于轉換不同類型的指針/引用
pNum = reinterpret_cast<int*>( pStr );
// 將int類型重新解釋成int*類型
// 轉換之后,int型的0x12345678變成int*類型的0x12345678
// pNum保存的就是地址0x12345678
pNum = reinterpret_cast<int*>( 0x12345678 );
// pNum 指向 0x12345678
// 轉換之后,pNum的值不變,nNum等于0x12345678
int nNum = reinterpret_cast<int>( pNum );
char ch;
int& rNum = reinterpret_cast<int&>( ch );
return 0;
}
命名空間 輸入輸出
include <iostream>
// 使用命名空間:std;
// 因為cin和cout都是保存在此命名空間中的.
using namespace std;
int fun( ) {
cout << "hello";
}
namespace MyNameSpace{
int fun( ) {
cout << "world";
}
int g_nNum;
};
// 聲明在此文件中使用MyNameSpace命名空間中的fun符號
// 使用之后, 再想使用此命名空間中的符號時,就無需在符號
// 前加 "MyNameSpace::"
//using MyNameSpace::fun;
//聲明使用命名空間中的所有符號
//using namespace MyNameSpace;
/*
-
使用cout將以下數據按格式輸出(注意有空格):
printf(“OutPut : %c %d %lf %s\n” ,
‘c’ , 123 , 456.789 , “helloworld”);
/
int main(int argc , char argv[] ) {fun( );
MyNameSpace::fun( );// C++編程追求 : 代碼盡可能地簡潔.
cout << "hello " << "world" << endl/換行/;
cout << 'c' << ' '
<< 123 << ' '
<< 456.789 << ' '
<< "hello15PB" << ' '
<< endl;
// 輸出整型的不同形式
printf( "%x" , 123456 );
cout << 123456 << endl;// 輸出寬度的控制
printf( "%3d" , 12 );
cout << 12 << endl;// 輸出寬度與填充字符的控制
printf( "%03d" , 12 );
cout << 12 << endl;
// cin的使用
char szName[ 32 ] = { 0 };
cout << "請輸入姓名";
cin >> szName;
cout << "請輸入年齡";
int nAge = 0;
cin >> nAge;cout << "請輸入身高和性別:";
double dHeight;
char chSex;
//可在控制臺中輸入: 1.8 M
cin >> dHeight >> chSex;
cin >> hex >> nAge;return 0;
}