C++ 学习笔记(一)
C++ 语言中 struct 与 C 语言中 struct 的区别
- 在 C++ 语言中,可直接使用结构体名来声明变量;在 C 语言中,不能直接使用结构体名来声明变量,需前缀 struct。
- **C++ 语言的 struct 中既可以定义成员变量又可以定义成员函数;C 语言的 struct 中只能定义成员变量,不能定义成员函数。**例如:
struct shiyanlou
{
int a;
int pri() {return a;}
}s1;
在 C++ 的编译过程中,此结构体不会出错。但若在 C 语言中,由于 int pri() {return a;}
为成员函数,会出现编译报错。
常量声明
常量声明一般有两种方式,一是使用 #define
预处理、二是使用 const
关键字。
- 使用
#define
预处理
格式:#define name value
#define PI 3.14159
#define NEWLINE '\n'
- 使用
const
关键字
格式:const type name = value
const double pi = 3.14;
const char tab = '\t';
- 在 C++ 中逗号也是一个运算符,称为 逗号运算符,其形式为:
表达式1,表达式2
。定义了从左到右的求解顺序,例如a = 1,a + 1
其值为 2。 - C++ 中最简单的赋值运算符是 ‘=’。例如
a = (x=4) / (y=2)
表达的则是 x 赋值为 4,y 赋值为 2,a 赋值为 4 / 2,即 2。除了=
,C++ 中还有一些其他比较常用的赋值运算符:
内存分配的三种方式
不同的内存分配方式,有不同的内存调度机制。C++ 语言的三种内存分配方式分别是:静态存储区分配、栈内存分配和堆内存分配。
- 静态存储区分配
静态分配方式下的内存在程序编译的时候就已经分配好了且存在于程序的整个运行过程。例如 static 变量,其生命周期随程序的结束而结束,而非像一般变量随函数或作用域的结束而结束。
除了 static 变量,还有一种全局对象 static object,也可以存放在静态存储区。
- 栈内存分配
栈内存分配方式下的内存是存在于某作用域的一块空间。例如调用某个函数时,函数内局部变量的存储单元可以在栈上创建,函数执行结束时,这些内存单元会被自动释放。
函数内局部变量的生命周期:起于变量声明,止于函数执行结束。
- 堆内存分配
堆内存分配,也称 动态内存分配,通常使用 new 和 delete 关键字进行管理。堆内存空间可由用户手动分配和释放,所以其生存周期由用户指定,较为灵活。但频繁的分配、释放大小不同的堆空间会产生内存碎片。
函数扩展
默认参数
在 C++ 中,函数可定义具有默认值的参数,即 默认参数。当调用函数时,如果用户指定了参数值,则使用用户指定的值;如果参数值缺省,则使用默认参数。例如新建 defaultcs.cpp
,输入:
#include<iostream>
using namespace std;
int add(int a,int b = 5){//变量 b 的值默认为 5。
return a + b;
}
int main()
{
int a,b;
cout<<"input a b:"<<endl;
cin>>a>>b;
cout<<"a + b(default) = "<<add(a)<<endl; //此时调用的 add 函数将 b 的值缺省,使之为默认参数。
cout<<"a + b = "<<add(a,b)<<endl;
return 0;
}
add(a)
的返回结果为:输入的 a 值与默认 b 值之和。
add(a,b)
的返回结果为:输入的 a 值与输入的 b 值之和。
程序结果:
函数重载
函数重载 指定义一个参数类型或参数个数不同的重名函数。当程序执行时,编译器将调用参数类型与函数形参类型一致的函数。例如新建 renamehs.cpp
,输入:
#include<iostream>
using namespace std;
int add(int a,int b){ //定义整型函数 add。
int c;
c = a - b;
return c;
}
double add(double a,double b){ //定义双精度型函数 add。
double c;
c = a + b;
return c;
}
int main()
{//函数重载。
cout<<"a + b = "<<add(3,4)<<endl;//调用整型函数 add。
cout<<"a + b = "<<add(3.111,4.222)<<endl;//调用双精度型函数 add。
}
执行 add(3,4)
时,调用 int add(int a,int b)
函数。
执行 add(3.111,4.222)
时,调用 double add(double a,double b)
函数。
程序结果: