c++基础知识day4(上)

1.对象初始化列表
// 一个类B中 有另一个类A的对象,A中没有无参构造
// 不能直接定义A的对象,需要某种机制对A的对象进行初始化
// ===> 对象初始化列表:用来对对象进行初始化
// 构造函数后面加 :后面是要初始化的对象
// 1、对象初始化列表比当前对象的构造函数先执行
// 2、对象在对象初始化列表中的顺序和构造顺序无关,和在类中的声明顺序有关
// const常量也要放到对象初始化列表中进行初始化
// 构造函数的调用顺序和析构函数的调用顺序相反

2.动态创建对象和释放
// malloc 和 free:是C语言的库函数,不是语法的一部分
// new  和 delete:是C++的运算符  =====> 因为是运算符,效率比malloc和free要高
// new 和 delete
 // 开辟空间:new 数据类型
int *p2 = new int;
 *p2 = 10;
 cout << *p2 << endl;
 // 释放
 delete p2;
 // new 在创建变量的时候可以对变量进行初始化
 int *p3 = new int(20);
 cout << *p3 << endl;
 delete p3;
// new 创建数组
 // new 数据类型[大小], 创建数组的时候不能初始化
 int *p2 = new int[10];
 for (int i = 0; i < 10; i++)
  p2[i] = i;
 for (int i = 0; i < 10; i++)
  cout << p2[i] << " ";
 cout << endl;
 // 释放:delete 需要注意的是,释放的时候一定要 加上[],不然会导致内存泄露
 delete[] p2;
// 对象的动态创建
void func3()
{
 // new 创建对象的时候会自动调用构造函数对对象进行初始化
 A *pa = new A(10);
 // delete 析构对象的时候,会自动析构函数回收对象资源
 delete pa;
}

3.静态成员变量和静态成员函数

// 静态成员函数只能使用静态成员变量
 static void show()
 {
  // printf ("id = %d, name = %s\n", _id, _name);
  printf ("num = %d\n", num);
 }
// 静态成员变量不是对象的属性,是类的属性,不属于单个对象
 // 而是所有对象所共享的一个变量
 // 静态成员变量必须在类的外部进行初始化
 static int num;
// 静态成员变量必须在类的外部进行初始化
int Student::num = 10;
// 静态成员使用:
 // 1、通过对象来使用
 s1.num = 123;
 cout << s2.num << endl;
 // 2、通过类名来使用
 Student::num = 456;
 cout << s3.num << endl;
 // 静态成员函数
 s3.show();
 Student::show();

4.对象的内存模型

// 类的普通成员函数,内部都有一个隐藏的指向当前对象的指针

 // ======> this
 Test(int a, int b)    // Test(Test *const this, int a, int b)
void show()          // void show(Test *const this)
static void show1()  // static void show1()
void show2() const         // void show(const Test *const this)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值