内存空间
使用流程
分配内存空间,使用内存空间,回收内存空间
使用函数
new/delete
注意
new自带初始化,delete不带初始化
new按类型分空间,delete按字节分空间
new返回自己分配空间的类型指针, delete返回void*
引用
概念
为变量所创建的一个别名,与操作原变量的操作一样
用法
变量名 & 别名
注意
引用时必须初始化
类型一致
对象不可更改
引用不可指向NULL
示例
引用与指针
引用与返回值
引用与结构体
引用与常量
函数
默认参数
当不对函数进行传参时,函数使用默认参数
注意
默认参数从最右边开始往左写,也就是靠右原则
只在声明处加,定义处不能加
函数哑元
可看成占位符,对函数无影响
注意
占位参数必须传值
函数重载
同一函数名多次使用
注意
不同的函数参数与函数类型作为判断条件
类
类的成员
class关键字
private: 声明私有成员变量
只有类自己可使用
protected: 声明保护成员变量
只有类自己与继承的类可以使用
public: 声明公有成员函数
都可使用
例子
假设有个女生
她是单身(公有成员),谁都可以成为她的对象
她不是单身(私有成员),现在她属于对象的对象
她成家有子(保护成员),她属于丈夫与孩子的
#include <iostream>
#include <string>
#include <cstdlib>
#include <cstdio>
/*****************声明区**********************************************************************/
using namespace std;
/*****************内存空间分配**************************/
// 声明一个函数,返回一个指针变量,指向一个int数组,大小为10
int *fun()
{
int *q = new int[10];
return q;
}
/*****************引用与指针**************************/
// 声明一个指针变量w,并分配9个int的内存空间
int *w = new int[9];
// 声明函数,将两个变量的值互换
void fun(int &a, int &b)
{
int c = a;
a = b;
b = c;
}
// 声明一个结构体
typedef struct A
{
int x;
struct A *next;
} A;
// 声明一个函数,返回一个指针变量,指向一个结构体,并初始化结构体变量
void funa(A *&p)
{
// 分配新的内存空间
p = (A *)malloc(sizeof(A));
// 初始化结构体变量
p->x = 10;
p->next = NULL;
}
/*****************引用与返回值**************************/
// 返回静态局部变量
int &funA(const int &a, const int &b)
{
// 局部变量
static int c = a + b;
cout << "静态局部变量:" << c << endl;
return c;
}
int value = 10;
// 声明函数,返回一个引用变量,指向全局变量value
int &funa()
{
return value;
}
/*****************引用与结构体**************************/
struct Z{
// 声明一个结构体变量
int X;
// 声明一个引用变量
int &Y;
};
/*****************引用与常量**************************/
int ADD(const int &a, const int &b){
return a + b;
}
/*****************函数 默认参数**************************/
int funB(int a, int b = 100, int c = 200)
{
return a + b + c;
}
// 函数声明时带默认参数,定义时不能带默认参数
int funC(int a, int b = 100, int c = 200);
/*****************函数 函数哑元**************************/
void funD(int a, int b,...)
{
// 打印参数a和b
cout << "a=" << a << " b=" << b << endl;
}
/*****************函数 函数重载**************************/
int funE(int a, int b){
return a + b;
}
int funE(int a, int b, int c){
return a + b + c;
}
/*****************类 访问控制**************************/
class AAA{
// 声明私有成员变量
private:
int x;
// 声明保护成员变量
protected:
int y;
// 声明公有成员函数
public:
AAA(){
x = 0;
}
int getX(){
return x;
}
};
/*****************主函数**********************************************************************/
int main()
{
/*****************内存空间分配**************************/
cout << endl;
cout << "内存空间分配" << endl;
// 使用内存空间
int *a = fun();
// 给内存空间赋值
*a = 10;
cout << "显示内容:" << *a << endl;
// 给3号位置赋值 内存名为w
w[2] = 100;
// 输出w数组内容
for (size_t i = 0; i < 10; i++)
{
printf("第%ld组的内容", i);
cout << w[i] << endl;
}
// 释放内存空间
delete[] a;
delete[] w;
/*****************引用与指针**************************/
cout << endl;
cout << "引用与指针" << endl;
// 调用函数进行值互换
A *p1 = NULL;
funa(p1);
cout << "显示内容:" << p1->x << endl;
// 释放内存空间
free(p1);
/*****************引用与返回值**************************/
cout << endl;
cout << "引用与返回值" << endl;
// 调用函数,返回静态局部变量
int &A = funA(101, 210);
cout << "未修改的静态局部变量显示内容:" << A << endl;
// 调用函数,返回全局变量
int &B = funa();
cout << "全局变量显示内容:" << B << endl;
// 修改全局变量
B = 20;
cout << "修改后的全局变量显示内容:" << B << endl;
// 再次调用函数,返回修改后的全局变量
funa() = 900;
cout << "修改后的全局变量显示内容:" << B << endl;
/*****************引用与结构体**************************/
cout << endl;
cout << "引用与结构体" << endl;
int X = 11;
// 声明结构体变量
Z z = {X, X};
cout << "修改前的结构体变量X: " << z.X << endl;
cout << "修改前的引用变量Y: " << z.Y << endl;
X = 99;
// 输出结构体变量
cout << "修改后的结构体变量X: " << z.X << endl;
cout << "修改后的引用变量Y: " << z.Y << endl;
/*****************引用与常量**************************/
cout << endl;
cout << "引用与常量" << endl;
int C = 999;
const int &D = C;
cout << "常量引用变量D: " << D << endl;
int C1 = 1000;
int C2 = 2000;
cout<<"常量函数ADD(C1,C2): "<<ADD(C1,C2)<<endl;
// 不能修改常量引用变量
// 常量引用 引用常量
const int &D1 = 190;
const int C3 = 290;
/*****************函数 默认参数**************************/
cout << endl;
cout << "函数 默认参数" << endl;
cout << "funB(10,20,30): " << funB(10, 20, 30) << endl;
cout << "funB(10,20): " << funB(10, 20) << endl;
cout << "funB(10): " << funB(10) << endl;
cout << "funC(10,20,30): " << funC(10, 20, 30) << endl;
cout << "funC(10,20): " << funC(10, 20) << endl;
cout << "funC(10): " << funC(10) << endl;
/*****************函数 函数哑元**************************/
cout << endl;
cout << "函数 函数哑元" << endl;
funD(10, 20, 30, 40, 50);
/*****************函数 函数重载**************************/
cout << endl;
cout << "函数 函数重载" << endl;
cout << "funE(10,20): " << funE(10, 20) << endl;
cout << "funE(10,20,30): " << funE(10, 20, 30) << endl;
/*****************类 访问控制**************************/
cout << endl;
cout << "类 访问控制" << endl;
AAA aaa;
cout << "公有成员函数getX()返回值:" << aaa.getX() << endl;
return 0;
}
/*****************函数定义**********************************************************************/
/*****************函数 默认参数**************************/
int funC(int a, int b, int c){
return a + b + c;
}