- 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;
}