CS3L2——类和对象

本章代码关键字

1
2
class        //类声明关键字
new //实例化关键字

具有相同特征,相同行为的一类事物的抽象,类是对象的模板,可以通过类来创造对象

何为抽象

抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征的过程。
例如:从众多的人中抽取出:姓名、肤色、国籍、性别、年龄、身高、体重等等的共同的特征

类的关键词是 class

类的申明 和 类对象的申明是两个概念
类的声明 是申明对象的模板 用来抽象(形容)显示事物的
类对象的申明 是用来表示现实中的对象个体的

类是一个自定义的变量类型,实例化一个类对象是申明变量

类与结构体的区别,详见:CS3L26——结构体和类的区别

类声明在哪里以及声明语法

class​ 申明在 namespace​ 内

1
2
3
4
5
6
7
8
9
10
11
12
13
14
namespace lesson1类和对象
{
class 类名 //可加访问修饰符
{
//特征——成员变量
//行为——成员方法
//保护特征——成员特性

//构造函数和析构函数
//索引器
//运算符重载
//静态成员
}
}

类声明示例

1
2
3
4
5
6
7
8
9
10
class Person    //用来形容人类
{
//类名命名用帕斯卡命名法
//同一个语句块里不同类不可以重名!!
}

class Machine //用来形容机器
{

}

(类)对象

类的声明 和 类对象(变量)声明是两个概念
类的声明 类似与 枚举 和 结构体 的声明 相当于申明了一个自定义变量类型

而 对象 是类创建出来的,相当于申明一个指定类的变量
类创建对象的过程 一般称为 实例化对象
类对象 都是引用类型的(和数组,string​ 一样)(注意!结构体是值类型!!!)

实例化对象基本语法

1
2
3
类名 变量名;
类名 变量名 = null; // null代表空
类名 变量名 = new 类名();

实例化对象

1
2
3
4
5
6
7
8
9
Person p;                   //相当于在栈空间已经开了一个房间,里面是 null,没有在堆上分配空间
Person p2 = null; //等同于上面的代码

Person p3 = new Person(); //相当于在栈空间开了一个房间,在堆上也分配了空间,栈空间指向堆内存内的空间
Person p4 = new Person(); //相当于一个 人 对象,和 p3 指向的数据不同
Person p5 = new Person(); //相当于又创建了一个 人 对象,和 p3,p4 指向的数据不同

Machine m = new Machine();
Machine m2 = new Machine();

这里的 p3​、p4​、p5​ 在栈上存储着指向堆空间的地址,它们指向不同的地址!

注意!它们虽然来自一个类的实例化 但是他们的特征 行为 等信息 都是他们独有的
千万不要认为他们共享了数据,同类不同对象 彼此在内存里没有任何关系!!!

面向对象编程类似于女娲造人,想要什么对象就 new​ 一个对象,一切的对象都是由我们控制的

目前示例化出来的对象还什么都不能调用,因为我们没有在类声明的时候声明成员,后续我们会学习这些内容