第一章 面向对象
第一节 类与对象
一、类
1、类的概念
类是对数据的一种抽象,所谓抽象就是将一些事物中不需要的数据剔除,而留下程序需要的。
类的声明
声明一个类的语法:
class 类名
{
private:
//私有的成员
public:
//公有的成员
};
2、类的成员
在类中可以声明任意类型的变量,即成员变量,表示这个类的属性。比如说学生可以有一个整形变量表示id,字符数组表示姓名,浮点型变量表示成绩。
在类中可以声明函数,即成员函数,表示这个类的行为。比如说学生可以有一个print函数打印自己的成绩。
3、类的定义
主要是对类中的成员函数进行定义
析构函数的定义定义类成员函数的语法:
返回值类型 类名 :: 函数名(参数列表)
{
函数体
}
4、定义类成员函数的注意事项
当类成员函数定义在类的外部时,一定要在函数名前加上“类名::”,以引来表示该函数是类的成员函数。
在类的成员函数中可以自由的访问该类的其他成员属性和成员函数。
类成员函数的定义一般写在与头文件对应的.cpp文件中。
二、对象
1、对象的概念
从广义上讲,要在内存上一段有意义的区域就称之为对象。
在c++中,对象一般是指类在内存中装载的实例,具有相关的成员变量和成员函数。类是抽象的概念,而对象是通过类实现的具体实例。
比如说,学生是类,学生小明是对象
对象调用公有成员:可以通过运算符“:”或者 “->”访问对象里的公有(public)成员
this指针:
⏹当通过对象调用成员函数传递参数时,会额外将本身的地址做为参数传递进入函数。比如说我们实际调用成员函数如下:
◆tom.introduce();
⏹实际上编译器认为的代码是:
◆tom.introduce(&tom);
2、构造函数和析构函数
由于对象一定会在内存中占用一段空间,所以一定会有其生命周期。也就是说对象一定有申请内存空间和释放内存空间的步骤。
构造函数是当对象申请内存空间之后自动调用的函数。
析构函数是当对象的空间即将被销毁前自动调用的函数
2..1、构造函数
2.1.1 构造函数声明
构造函数的声明需要在类中声明。
构造函数没有返回值。
构造函数的函数名必须和类名一致。
2.1.2、构造函数的定义
构造函数可以直接定义在类内部,也可以直接定义在类的内部。
定义在类内部的方式:
⏹类名(参数){ //函数体}
定义在类外部的方式:
⏹类名::类名(参数列表){ //函数体}
构造函数列表初始化(const成员只能被初始化,不能被赋值)
⏹可以用列表初始化的方式对类成员直接赋值,这样做会提高程序运行效率。
⏹类名::构造函数(参数1,参数2,……)
⏹:类成员(参数1),类成员(参数2),……
⏹{//其它属性初始化}
⏹注意:列表初始化对方式只支持将参数通过赋值运算赋值给类成员。
⏹注意:列表初始化成员的顺序必须和类成员声明的顺序一致。(只要成员变量的初始化不依赖其他成员变量,即使顺序不同也能正确的初始化。)
2.1.3、构造函数的特点
用于初始化对象的成员属性
构造函数的函数名必须与类名一致。
构造函数没有返回值。
同一个类可以有多个参数列表不同的构造函数。
当且仅当一个类没有声明构造函数里,编译器会自动生成一个无参无内容的构造函数。
2.1.4、构造函数隐匿调用
当构造函数只有一个参数时,就可能出现构造函数隐匿调用现象。例如:Number i=55;这样的现象。
55是一个整数,i是一个Number类型,这却可以让整数初始化自己定义到类型。因为在这个过程中出现了构造函数隐匿调用的情况。
注意:在构造函数声明前加上explicit关键字可以关闭构造函数隐式调用的功能。
2.2、析构函数
2.2.1析构函数的声明
析构函数的函数名以~+类名
析构函数没有返回值
析构函数没有参数列表
2.2.2析构函数的定义
析构函数即可以在类的内部定义也可以在类的外部定义
类内部定义:
~类名(参数列表){ //函数体}
类外部定义:
类名::~类名(参数列表){ //函数体}
三、new和delete
new和delete是C++中的两个关键字,主要用于在向堆申请或者释放空间。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论