面向对象I

面向对象

三大特性:封装 继承 多态
四大特性:抽象 封装 继承 多态

写在函数以外的是数据;

数据的生命周期是和进程对等的;

在这里插入图片描述

所有的数据都会生成符号;

所有的函数名都会生成符号;

函数体会生成指令;

this 指针

指向本对象的指针。

编译时期加上:
普通成员方法的第一个参数,默认加上this指针;
在普通成员方法内使用到普通成员的地方加上this指针的解引用;
在调用成员方法的时候加上参数this指针。

构造函数

(对象产生时调用)

可以重载——参数列表不限制。
使用构造函数的目的是,给成员属性进行初始化。

浅拷贝:指针直接给指针赋值。(一般不使用浅拷贝)
深拷贝:重新申请空间,将数值拷贝过来。

当对象进行构造的时候默认调用的成员方法;
如果没有实现构造函数,系统会生成一个默认构造函数。

当自己实现了构造函数之后,系统就不会生成默认构造函数了。

默认构造函数——除了this指针以外没有参数的构造函数。

析构函数

(对象死亡时调用)

不可重载,没有可见参数。
对象生存周期满了之后自动调用的成员方法。

析构函数如果没有自己实现,系统会默认生成一个——生成的函数什么都不做;
一旦自己实现,就不会再生成了。

在栈桢上,先构造的后析构。

拷贝构造函数

用一个已存在的对象给另一个正在生成的对象初始化的时候自动调用的成员方法。

如果没有实现,会自动生成一个浅拷贝的拷贝构造;
如果自己实现,就不会生成。

注意

拷贝构造函数一定要传引用,防止死递归;
拷贝构造要预防浅拷贝。

等号运算符重载

当使用一个已存在的对象给另一个已存在的对象赋值时,自动调用成员的方法。

如果不自己实现,就会自动生成一个浅拷贝的等号运算符重载函数;
如果实现了,就不会生成了。

注意

防止自赋值;
防止内存泄漏;
防止浅拷贝。

对象生存周期

 person p4=20;
使用20生成临时对象
使用临时对象拷贝构造p4
析构临时对象

如果出现上述步骤,会被直接优化成构造p4;
临时对象的生存周期之在当下语句;
在当下栈帧上,临时对象如果被引用,临时对象的生存周期就会被提升为和引用一致。

权限

public
private

class中默认权限是privata;
struct中默认的权限是public。

权限选择
必须要对外界提供的,就放在public,其他的都放在privata;
一般成员属性都放在private,如果外界需要使用就提供共有接口;

放在私有属性中的成员如果对外使用——

 const   char *get_name()
 {
 return_name;
 }
 如果对于特定角色需要修改
 void Get_age(int age,int name)
 {
      if(name==1)
     {
     _age=age;
     }
 }

定义

   int a;
   person p;

初始化

   在定义的时候给值,内存划分时候给值。
   
   Person ()

赋值

定义之后给值,内存划分完之后给值。

初始化列表

只有构造函数有初始化列表;
必须初始化的成员放在初始化列表;
在本对象构造之前需要完成的动作,必须放在初始化列表。

const成员——必须放在初始化列表。

const方法

  常对象只能调用常方法——构造函数,析构函数,静态函数不影响。
  常方法中只能调用常方法——静态函数不影响。

哪些成员方法需要写成常方法?

  1. 如果成员方法内不需要改动成员,并且没有对外暴露成员引用||指针,就可以直接写成常方法;
  2. 如果成员内部不需要改动成员,但是会对外暴露成员引用||指针,就写成两个成员方法(const方法和非const方法),形成重载;
  3. 如果成员方法内部需要改动成员,就写成普通方法。

静态成员变量

静态成员在一个类只有一份,无论构造多少多少,都只有一份;
存储在数据段;
必须在类外的.cpp文件中进行初始化,且只能初始化一次;
静态成员变量的访问可以不依赖于对象(不依赖于this指针),使用类的作用域可以直接访问

静态成员变量的类外初始化:

静态成员方法

 静态成员方法没有this指针;
 静态成员方法的访问可以不依赖于对象(不依赖于this指针),使用类的作用域可以直接访问;
 静态成员方法内只能使用静态成员。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值