类和对象——对象特性

构造函数和析构函数

构造函数 语法:类名(){}

  1. 构造函数,没有返回值也不写void
  2. 函数名称与类名相同
  3. 构造函数可以有参数,因此可以发生重载
  4. 程序在调用对象时候会自动调用构造,无须手动调用,而且只会调用一次

析构函数 语法:~类名(){}

  1. 析构函数,没有返回值也不写void
  2. 函数名称与类名相同,在名称前加上符号 ~
  3. 析构函数不可以有参数,因此不可以发生重载
  4. 程序在对象销毁前自动调用析构,无需手动调用,而且只会调用一次

构造函数的分类及调用

两种构造方式

按参数分为:有参构造和无参构造
按类型分为:普通构造和拷贝构造

三种调用方式

括号法(主要)

调用默认构造函数时候,不要加()
因为编译器会认为这是一个函数的声明

显示法

不要利用拷贝构造函数 初始化匿名对象,编译器会认为Person(p3) === Person p3;

隐式转换法

Person p4 = 10;
Person p5 = p4;

拷贝构造函数的调用时机

  • 使用一个已经创建完毕的对象来初始化一个新对象
  • 值传递的方式给函数参数传值
  • 以值方式返回局部对象

构造函数的调用规则

  • 创建一个类,C++编译器会给每个类都添加至少三个函数:
    默认构造函数、析构函数、拷贝构造函数
  • 如果我们写了有参构造函数,编译器就不再提供默认构造,依然提供拷贝构造
  • 如果写了拷贝构造函数,编译器就不提供其他构造函数

静态成员

静态成员变量就是在成员变量和成员函数前加上关键字static,成为静态成员

静态成员变量

  • 所有对象共享同一份数据
  • 在编译阶段分配内存
  • 类内声明,类外初始化
  • 静态成员变量是有访问权限的,私有成员访问不到
  • 有两种访问方式:通过对象和通过类名
Person :: p.m_A

静态成员函数

  • 有两种访问方式:通过对象和通过类名
  • 静态成员函数可以访问静态成员变量,静态成员函数不可以访问非静态成员变量
  • 静态成员变量是有访问权限的,私有成员访问不到

对象模型和this指针

成员变量和成员函数分开存储

  • 空对象占用内存空间为1,C++编译器会对每个空对象分配一个字节空间,是为了区分空对象占内存的位置
  • 只要是空的就是1,但如果里面有一个int就是4
  • 静态成员变量不属于类对象上

const修饰成员函数

常函数

  • 成员函数后加const后我们称为这个函数为常函数
  • 常函数内不可以修饰成员属性
  • 成员属性声明时加关键字mutable后,在常函数中依然可以修改
//在成员函数后面加const,修饰的是this指针,让指针指向的值也不可以修改
void showPerson() const
{
	this0>m_A=100;//报错
}

常对象

  • 声明对象前加const称该对象为常对象
  • 常对象只能调用常函数
  • 成员属性声明时加关键字mutable后,在常函数中依然可以修改
void test()
{
	const Person p;//常对象
	p.m_A=100;//报错
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值