C++---类和对象

C++中面向对象的三大特征为:封装、继承、多态。

封装

封装的意义:

将属性和行为作为一个整体,表现生活中的事物

 

访问权限

公共权限 public  成员 类内可以访问 类外可以访问

保护权限 protect 成员 类内可以访问 类外不可以访问  儿子也可以访问父亲中的保护内容

私有权限 private 成员 类内可以访问 类外不可以访问  儿子不可以访问父亲的私有内容

 

构造函数和析构函数

这两个函数将会被编译器自动调用,完成对象的初始化和清理工作

构造函数:主要作用于创建对象时为对象的成员属性赋值,析构函数由编译器自动调用,无需手动调用

没有返回值也不写void

函数名称与类名相同

构造函数可以有参数,因此可以发生重载

程序在调用对象时候回自动调用构造函数,无需手动调用,而且只会调用一次

析构函数:主要作用域对象销毁前系统自动调用,执行一些清理工作

没有返回值不写void

函数名称与类名相同,在名称前加上符号~

析构函数不可以有参数,因此不可以发生重载

程序在对象销毁前会自动调用析构,无需手动调用,而且只会调用一次

 

构造函数的分类及调用

两种分类方式:

  按参数分类:有参构造函数和无参构造函数

  按类型分:普通构造函数和拷贝构造

//拷贝构造函数
Person(const Person &p) { //将传入的人身上的所有属性,拷贝到我身上 age=p.age; }

三种调用方式:

  括号法

//括号法
Person p1;//默认构造函数调用
Person p2(10);//有参构造函数
Person p3(p2);//拷贝构造函数

  显式法

//显式法
Person p1;//默认构造函数调用
Person p2=Person(10);//有参构造函数
Person p3=Person(p2);//拷贝构造函数
Person(10);//匿名对象 特点:当前执行结束后,系统会立即回收掉匿名对象

  隐式转换法

Person p4=10;//相当于写了 Person p4=Person(10);

 

拷贝构造函数调用时机

使用一个已经创建完毕的对象来初始化一个新对象

Person p1(20);
Person p2(p1);

值传递的方式给函数参数传值

void doWork(Person p)
{
}
Person p;
doWork(p);

以值方式返回局部对象

Person doWork()
{
  Person p1;
  return p1;
}
Person p=doWork()

 

深拷贝和浅拷贝

浅拷贝:简单的赋值拷贝操作

    问题:堆区的内存重复释放

    浅拷贝的问题要利用深拷贝进行解决

深拷贝:在堆区重新申请空间,进行拷贝操作

 

 初始化列表初始化属性

直接在创建构造函数时将属性进行初始化

Person():m_A(10),m_B(20),m_C(30)
{

}

当其他类对象作为本类成员,构造时候先构造类对象,再构造自身,析构的顺序与构造相反

 

posted on 2020-08-22 11:17  0黑曼巴00  阅读(190)  评论(0)    收藏  举报