=====================
2016-8-27
=====================
主题:
1.c++输入输出
2.namespace 命名空间
3.引用和函数引用参数
4.内联函数inline
5.函数重载,默认参数的函数,函数模板
6.内存管理
1.c++ 输入输出
=====================
//cin cout 可以自动识别基本数据类型
cin //输入
cout //输出
随用随定义以
bool 数据类型
bool b = 1; //定义布尔类型
cout<<boolalpha<<b<<endl; //以布尔类型输出
bool x = false; //假
bool x = true; //真
#include<iostream> //数据输入输出流
#include<stdlib.h>
using namespace std; //命名空间
int main(void)
{
int a = 0;
cout<<"请输入一个整数"<<endl;
cin>>a;
cout<<oct<<a<<endl; //8进制输出
cout<<dec<<a<<endl; //10进制输出,不写类型默认输出十进制
cout<<hex<<a<<endl; //16进制输出
cout<<"请输入一个布尔值0或者1"<<endl;
bool b = 1; //定义布尔类型
cin>>b;
cout<<boolalpha<<b<<endl; //以布尔类型输出
return 0;
}
-----------------------------------------------------------------------------------------------------------------
2.命名空间: namespace
=============================
:: 作用域运算分解符
-----------------------
#include<iostream>
#include<stdlib.h>
using namespace std;
namespace A
{
int x = 3;
void fun()
{
cout<<"A"<<endl;
}
}
namespace B
{
int x = 10;
void fun()
{
cout<<"B"<<endl;
}
}
using namespace B; //不用作用域分解运算符则默认用B空间
int main(void)
{
cout<<A::x<<endl; //引用A空间 :: 作用域分解运算符
cout<<x<<endl; //使用B空间
A::fun();
fun();
return 0;
}
-------------------------------------------------------------------------------------------------------
3.引用:给变量起别名
============================
c++的函数参数传递:
(1).按值传递
(2).按引用传递,避免复制大量数据的开销,可以提高性能,按值传递如果数据量较大,复制数据将导致较长的执行时间
(3).引用时要赋初值
int a = 10;
int &b = a;
&只有在生明引用时是引用操作符,其他时候都是取地址
引用和指针的区别:
(1).指针是个变量,可以把它再赋值成纸箱别处的地址
(2).建立引用时必须进行初始化并且决不会再关联其他不同的变量
(3).有空的指针但是没有空的引用
数据类型 &引用名(别名) = 变量;
指针引用;
数据类型 *&引用名 = 指针;
int a = 10;
int *p = &a;
int *&q = p;
*q = 20; //等价于 *p = 20;
#include<iostream>
#include<stdlib.h>
using namespace std;
struct st
{
int x;
int y;
};
void fun(int &j, int &k)
{
int tmp;
tmp = j;
j = k;
k = tmp;
}
int main(void)
{
int a = 3;
int &b = a; //引用
b = 5;
int x = 10;
int *p = &x;
int *&q = p; //指针的引用
*q = 20;
struct st s;
struct st &d = s; //结构体的引用
d.x = 100;
d.y = 200;
cout << b << endl << *q <<endl;
cout<<d.x<<endl<<d.y<<endl;
int i = 20;
int j = 30;
cout<<i<<endl<<j<<endl;
return 0;
}
4.inline 内联函数
==================
定义:编译器在看到inline后,为该函数创建一段代码,以便在后面每次碰到该函数的调用都用一段代码来替换,\
以便有更快的调用速度,多次调用的函数
内联函数的声明:
(1).内联函数可以在一开始仅声明一次
(2).内联函数必须在调用之前被声明或定义,因为内联函数的代码必须在被替换之前已经生成被替换的代码
(3).内联函数中不能使用复杂的结构语句
=================
2016-08-29
=================
4.(1).函数重载:
==================
在同一作用域下函数的行参个数或者数据类型不同
func(int a, int b); | func(int a); | func(double a, double b); //函数重载
(2).函数参数默认值:在c++中函数的参数允许有默认值
func(int i = 1, int j = 2, int k = 3);
默认参数的顺序规定:
如果一个函数中有多个默认参数,则形参分布中,默认参数应从右向左逐渐定义,当调用函数时只能从左向右匹配参数
(3).函数模板
模板使程序员能够快速建立具有类型安全的类库集合和函数集合,它的实现,方便了大规模的软件开发
泛型编程:独立于任何特定类型的方式编写代码
函数模板的定义形式:
template<类型形式参数表> 返回类型 FunctionName(形式参数表)
{
//函数定义体
}
------------------------------
#include <iostream>
using namespace std;
//函数模板
template<typename T>
T abs(T x)
{
return x<0?-x:x;
}
int main(int argc, char *argv[])
{
int n = 5;
double b = -6.6;
cout<<abs(n)<<endl;
cout<<abs(b)<<endl;
return 0;
}
(4).内联函数:
inline: 建议性的,编译时将函数代码嵌在调用处,省去调用的时间
---------------------------------------------------------------------------------------
5.内存管理:
=================
运算符:new 申请内存
delete 释放内存,释放后置成 NULL
#include<iostream>
#include<stdlib.h>
/* 内存管理运算符:
* new //申请内存
* delete //释放内存
*/
using namespace std;
int main(void)
{
int i;
int *p = new int(100); //申请并赋初值
if(p == NULL) //校验是否申请成功
{
return 0;
}
// *p = 100; //两种赋初值方法
cout<<*p<<endl;
delete p; //用完释放
p = NULL;
int *arr = new int[4]; //申请块内存,与数组的使用相同
for(i = 0;i<4; i++)
{
arr[i] = i+10;
cout<<arr[i]<<endl;
}
delete []arr; //释放块内存
arr = NULL;
return 0;
}
2016-8-27
=====================
主题:
1.c++输入输出
2.namespace 命名空间
3.引用和函数引用参数
4.内联函数inline
5.函数重载,默认参数的函数,函数模板
6.内存管理
1.c++ 输入输出
=====================
//cin cout 可以自动识别基本数据类型
cin //输入
cout //输出
随用随定义以
bool 数据类型
bool b = 1; //定义布尔类型
cout<<boolalpha<<b<<endl; //以布尔类型输出
bool x = false; //假
bool x = true; //真
#include<iostream> //数据输入输出流
#include<stdlib.h>
using namespace std; //命名空间
int main(void)
{
int a = 0;
cout<<"请输入一个整数"<<endl;
cin>>a;
cout<<oct<<a<<endl; //8进制输出
cout<<dec<<a<<endl; //10进制输出,不写类型默认输出十进制
cout<<hex<<a<<endl; //16进制输出
cout<<"请输入一个布尔值0或者1"<<endl;
bool b = 1; //定义布尔类型
cin>>b;
cout<<boolalpha<<b<<endl; //以布尔类型输出
return 0;
}
-----------------------------------------------------------------------------------------------------------------
2.命名空间: namespace
=============================
:: 作用域运算分解符
-----------------------
#include<iostream>
#include<stdlib.h>
using namespace std;
namespace A
{
int x = 3;
void fun()
{
cout<<"A"<<endl;
}
}
namespace B
{
int x = 10;
void fun()
{
cout<<"B"<<endl;
}
}
using namespace B; //不用作用域分解运算符则默认用B空间
int main(void)
{
cout<<A::x<<endl; //引用A空间 :: 作用域分解运算符
cout<<x<<endl; //使用B空间
A::fun();
fun();
return 0;
}
-------------------------------------------------------------------------------------------------------
3.引用:给变量起别名
============================
c++的函数参数传递:
(1).按值传递
(2).按引用传递,避免复制大量数据的开销,可以提高性能,按值传递如果数据量较大,复制数据将导致较长的执行时间
(3).引用时要赋初值
int a = 10;
int &b = a;
&只有在生明引用时是引用操作符,其他时候都是取地址
引用和指针的区别:
(1).指针是个变量,可以把它再赋值成纸箱别处的地址
(2).建立引用时必须进行初始化并且决不会再关联其他不同的变量
(3).有空的指针但是没有空的引用
数据类型 &引用名(别名) = 变量;
指针引用;
数据类型 *&引用名 = 指针;
int a = 10;
int *p = &a;
int *&q = p;
*q = 20; //等价于 *p = 20;
#include<iostream>
#include<stdlib.h>
using namespace std;
struct st
{
int x;
int y;
};
void fun(int &j, int &k)
{
int tmp;
tmp = j;
j = k;
k = tmp;
}
int main(void)
{
int a = 3;
int &b = a; //引用
b = 5;
int x = 10;
int *p = &x;
int *&q = p; //指针的引用
*q = 20;
struct st s;
struct st &d = s; //结构体的引用
d.x = 100;
d.y = 200;
cout << b << endl << *q <<endl;
cout<<d.x<<endl<<d.y<<endl;
int i = 20;
int j = 30;
cout<<i<<endl<<j<<endl;
return 0;
}
4.inline 内联函数
==================
定义:编译器在看到inline后,为该函数创建一段代码,以便在后面每次碰到该函数的调用都用一段代码来替换,\
以便有更快的调用速度,多次调用的函数
内联函数的声明:
(1).内联函数可以在一开始仅声明一次
(2).内联函数必须在调用之前被声明或定义,因为内联函数的代码必须在被替换之前已经生成被替换的代码
(3).内联函数中不能使用复杂的结构语句
=================
2016-08-29
=================
4.(1).函数重载:
==================
在同一作用域下函数的行参个数或者数据类型不同
func(int a, int b); | func(int a); | func(double a, double b); //函数重载
(2).函数参数默认值:在c++中函数的参数允许有默认值
func(int i = 1, int j = 2, int k = 3);
默认参数的顺序规定:
如果一个函数中有多个默认参数,则形参分布中,默认参数应从右向左逐渐定义,当调用函数时只能从左向右匹配参数
(3).函数模板
模板使程序员能够快速建立具有类型安全的类库集合和函数集合,它的实现,方便了大规模的软件开发
泛型编程:独立于任何特定类型的方式编写代码
函数模板的定义形式:
template<类型形式参数表> 返回类型 FunctionName(形式参数表)
{
//函数定义体
}
------------------------------
#include <iostream>
using namespace std;
//函数模板
template<typename T>
T abs(T x)
{
return x<0?-x:x;
}
int main(int argc, char *argv[])
{
int n = 5;
double b = -6.6;
cout<<abs(n)<<endl;
cout<<abs(b)<<endl;
return 0;
}
(4).内联函数:
inline: 建议性的,编译时将函数代码嵌在调用处,省去调用的时间
---------------------------------------------------------------------------------------
5.内存管理:
=================
运算符:new 申请内存
delete 释放内存,释放后置成 NULL
#include<iostream>
#include<stdlib.h>
/* 内存管理运算符:
* new //申请内存
* delete //释放内存
*/
using namespace std;
int main(void)
{
int i;
int *p = new int(100); //申请并赋初值
if(p == NULL) //校验是否申请成功
{
return 0;
}
// *p = 100; //两种赋初值方法
cout<<*p<<endl;
delete p; //用完释放
p = NULL;
int *arr = new int[4]; //申请块内存,与数组的使用相同
for(i = 0;i<4; i++)
{
arr[i] = i+10;
cout<<arr[i]<<endl;
}
delete []arr; //释放块内存
arr = NULL;
return 0;
}