C++构造,初始化列表,this指针,const,static,单列模式

一、C++四个构造函数:

1. 无参构造:

2.有参构造:在构造函数的时候可以使用默认参数

3.拷贝构造:

class 类名
  {
  类名(类名& that)
  {
  //对类成员挨个赋值
  . …
  }
  }

Student stu2 = stu1;//用stu1 来拷贝stu2

4.赋值构造:

void operator = (Student& that)
  {

}
  //可以与其他对象进行交互
  Student& operator = (Student& that)
  {

}

注意:编译器都有默认的拷贝和赋值构造函数;

二、初始化列表

  1. 是一种成员的初始化方式,在构造函数的大括号体前使用小括号对类的成员进行初始化
      class 类名
      {
      类名(参数列表):成员1(参数)…
      {

}
  }
  1. 参数列表可以解决构造函数的参数与成员重名的问题
  2. 参数列表会先于构造函数执行
2. 如果类成员是数组,可以使用{}进行初始化
3. 如果有成员是类,可以在初始化列表中显示调用构造函数
4. 如果成员中有const成员,引用成员,必须使用初始化列表
5. 类成员的构造顺序与初始化列表无关,而是与成员定义的顺序有关

三、this指针

  1. 相同类型的对象各自拥有独立的成员实例,彼此共享成员函数
  2. 为了让成员函数知道哪个对象在调用,并准确访问到对象的成员,编译器会自动为每一个成员函数添加一个看不到的参数
    这个参数就是指向调用对象的指针(this)
  3. 类中的所有成员函数都有this指针,包括构造,析钩,拷贝构造等
    只是构造中this指向的是正在被创建的对象
  4. 默认情况下都是隐藏的(在成员函数中访问成员变量时自动就加上了),但也可以显示使用
  5. 使用情况使用this
      1. 区别成员变量与参数
      2. 把对象当作返回值与其他成员进行交互

四、常对象与常函数

  1. 常对象:创建对象时添加const关键字,这个对象就不可在修改,就有了常属性
    就意味着整个对象中所有变量不能更改
  2. 常对象不能调用普通函数,调用成员函数就相当于把对象的this指针给了他,就有被修改的风险
  3. 常对象只能调用常函数(函数体前加const关键字叫常函数),普通对象也能调用常函数
    常函数就相当于对this指针添加了const属性
  4. 常函数跟’非’常函数可以构成重载,不会冲突
  5. 如果有成员确实需要修改,它又需要被const修饰,可以对成员添加一个关键字mutable,这样即使常对象调用了常函数依然可以修改成员

五、静态成员与静态成员函数
  1. 类成员被static修饰,就会存储在bss段(此段是由编译器存放的而且大小是固定的),在程序中
  动态的创建对象时它的静态成员就无法创建,所有的类对象就共享一个静态成员
  2. 静态成员只能在类中声明不能在类中定义(必须在类外定义)

static 类型 类名::静态成员名;
  3. 静态成员就是声明在类中的全局变量,在任何位置都可以使用
  类名::静态成员名进行访问

4. 静态成员函数:类中的成员函数被static修饰后就变成了静态成员函数
  所有成员共享一份静态成员函数
  5. 静态成员函数不会传递this指针,
  不通过对象也能调用静态成员函数
  类名::静态成员函数(参数)

六.、单例模式
1.只能创建出一个对象的类,这种类就叫做单例类,这种模式就叫做单例模式
2、为什么需要单例模式,是为了提高安全性和稳定性的技巧。
  只允许存在唯一对象实例
  单例模式的商业应用:
  网站计数器
  日志管理系统
  连接池、线程池、内存池
3、获取对象实例的专门方法
  a、全局变量的定义不受控制,能防君子不能防小人
  b、专门方法是类的一部分,“我是类型我做主”,
  借助类禁止在外部创建对象,仅在类内部提供获取对象的接口。
4、如何实现单例模式
  a、禁止在类外部创建实例,私有所有的构造函数 private
  b、类自己维护其唯一实例,
  静态成员变量 static 类名 instance;
  静态成员指针 static 类名* instance;
  c、提供访问该实例的方法,静态成员函数getInstance()

5、饿汉单例模式
不管是否需要对象都已经创建好了。
优点:效率高、速度快、稳定。
缺点:浪费资源,不管需不需要对象都已经创建好;

6、懒汉单例模式
当首次使用获取对象时才会真正创建出对象。
优点:节约资源
缺点:效率低,速度慢,不安全(多线程情况下)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值