C++学习笔记_one_day
1、c与c++的关系:
c++是c的超集 c++包含c
2、c语言:
(1)32个关键字
数据类型(12):
signed/unsigned
char/short/int/long
float/double
void/struct/union/enum
流程结构(12):
顺序/循环/分支
循环:for while do while goto
分支:if else /switch case/defluat
break/continue/return/
其他(8):
存储:auto/extern/register/static/
sizeof/typedef/const/volatile 易变变量
(2)运算符(优先级和结合性)
(3)指针和函数 by_吴尚奇
-
简单的c++程序
C++程序的编译工具:g++(一定要和gcc版本一致)
C++源文件的后缀:.cpp(windows) .cc(linux)
hello.cc
*******************************************************
#include<iostream> //io流 -> 输入和输出
using namespace std;
int main(int argc,char **argv)
{
//cout << 用来输出变量的
cout << " hello world!\n";
//endl -> end line
cout<<" just do it"<<endl;
return 0;
}
************************************************************
C++文件的编译:g++ hello.cc -o hello
#include<iostream> //包含变量的输入和输出函数的声明
using namespace std; //使用std(标准)命名空间
//命名空间:包含 变量和函数的声明
cout <<”hello\n”<<endl;
变量的输入和输出:
输出:cout << “text”
输出:
Int i;
cin >> i
例子:韦小宝参加武林大赛
师傅:陈近南
获得 第一名 天地会的总舵主
获得 第二名 娶七个老婆
获得 第三名 踢出师门
xiaobao.cc
**************************************************************************
#include<iostream>
using namespace std;
int main()
{
int i;
cout<<"小宝,为师要参加第五届“黄山学院”杯武林大会,"
"告诉为师,你获得第几名"<<endl;
cout<<">";
cin>>i;
switch(i)
{
case 1:
cout<<"你替为师接管天地会总舵主吧"<<endl;
break;
case 2:
cout<<"为师有七个女儿,你全部娶了吧"<<endl;
break;
case 3:
cout<<"你走吧,我没你这个徒弟"<<endl;
break;
default:
cout<<"你太差劲了,为师杀了你"<<endl;
break;
}
return 0;
}
思考题:
C++和C的输入输出有什么不同?C++自动检查数据类型
命名空间: namespace
作用:解决了命名冲突(程序中可以使用同名的变量)
例如:
namespace.cc
×××××××××××××××××××××××××××××××××××××××××××××××××××××××
#include<iostream>
using namespace std;
//定义自己的命名空间
namespace Wu
{
int i=10;
}
namespace Qi
{
int i=20;
}
int main(int argc,char *argv[])
{
//域作用符 ::
//告诉编译器 变量i定义和申明的地方
cout<<" Wu::i="<<Wu::i<<endl;
cout<<" Qi::i="<<Qi::i<<endl;
return 0;
}
×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
新的数据类型:
bool:(true/false) 非0为真,0为假 true:1 false:0
例子:
bool.cc
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#include<iostream>
using namespace std;
int main()
{
bool sex=false; //true;
cout<<" LadyGaga 是 一位 "
<<(sex?"帅哥":"美女")<<endl;
return 0;
}
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
by_吴尚奇
课后作业:
-
写一条下列数据类型 “int/float/bool/指针” 与“零值”的比较语句
命令行参数:
例如:
Namespace.cc
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
#include<iostream>
using namespace std;
int main(int argc,char **argv)//==char *argv[]
{
//argc,argv都是 命令行 参数
//argc 表示命令行参数的个数
//argv 表示命令行参数的值(字符串 数组)
cout<<" argc="<<argc<<endl;
//打印 命令行参数的值
int cnt;
for(cnt=0;cnt<argc;++cnt)
{
cout<<" argv["<<cnt<<"]= "<<argv[cnt]<<endl;
}
return 0;
}
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
指针:(写申请空间语句的时候要立即写释放空间的语句)
(段错误/野指针/内存泄漏)
引用:reference
定义:变量的别名, 用 & 标识
本质:引用的内部实现是指针
注意点:1、不要返回局部变量的引用
-
在不改变值的情况下,尽量使用常引用(const) const int i = 10;
refrernce.cc
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#include<iostream>
using namespace std;
int main()
{
int i=10;
//定义一个引用 & 标识引用的
//1、引用必须在初始化的时候赋值,
// 引用每次只能引用一个变量,中途不能改变(终身制)
int &ri = i;//ri是 变量 i 的引用
/* error
* int &ri;
* ri=i;
*/
//2、引用本身不占内存空间
cout<<" &ri="<<&ri<<endl;
cout<<" i="<<&i<<endl;
//3、操作引用就是操作变量本身
cout<<" ri="<<ri<<endl;
cout<<" i="<<i<<endl;
ri+=250;
cout<<"after ri+=250"<<endl;
cout<<" ri="<<ri<<endl;
cout<<" i="<<i<<endl;
return 0;
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
课后作业2:分别使用引用和指针交换两个输入的整型数据
课后作业3:总结一下指针与引用的区别
C++函数的高级特性:
内联函数:
定义:用inline修饰的函数
特点:
-
结构简单(顺序结构)
-
函数体内的代码在5行以内
inline.cc
###############################################################
#include<iostream>
using namespace std;
//函数的定义
//[修饰符] 返回值 [调用方式] 函数名 形式参数列表
inline void show()
{
cout<<"I'm here"<<endl;
return;
}
//普通函数的调用过程
//1、通过函数名找到该函数在代码区域的位置
//2、执行该位置的代码
//3、在函数结束的时候,临时开辟空间存放返回值
int main(int argc,char **argv)
{
//内联函数执行的时候直接用函数体内的代码,代替函数调用的位置
//特点:执行效率高
show();
return 0;
}
###########################################################
内联函数与宏定义的区别
相同点:用代码直接替换调用
不同点:内联函数会对参数进行检查,宏定义不会检查参数的类型
Inline的现状
基本上不再使用了
原因:现在的编译器会自动优化代码,一般简单的函数不用inline优化,编译器也会自动把这类函数当作内联函数处理,反之,函数体比较复杂的函数,即使用inline修饰,编译器也不会将它作为内联函数处理。
递归函数(回顾)recursive
定义:自己调用自己的函数
函数特征:(1)有递归公式
-
有退出条件
优点:代码可读性强
缺点:内存开销比较大
例子: 1+2+3+....+n
¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
#include<iostream>
using namespace std;
int count(int n)
{
if(n>1)//递归条件
return n+count(n-1);
else//退出条件
return 1;
}
int main(int argc, char *argv[])
{
int n=100;
int sum=0;
sum=count(n);
cout<<" 1到100之间的和是"<<sum<<endl;
return 0;
}
¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
课后作业4: by_吴尚奇
输入一个整数n(n>2)
用递归显示fibonacci数列上第n个位置的数据