类的定义

类是用户自定义的类型,如果程序中要用到类,必须提前说明,或者使用已存在的类(别人写好的类、标准库中的类等),C++语法本身并不提供现成的类的名称、结构和内容。

简单的类的定义:

class Student{public://成员变量char *name;int age;float score;//成员函数void say(){cout<<name<<"的年龄是"<<age<<",成绩是"<<score<<endl;}
};

class是 C++ 中新增的关键字,专门用来定义类。Student是类的名称;类名的首字母一般大写,以和其他的标识符区分开。{ }内部是类所包含的成员变量和成员函数,它们统称为类的成员(Member);由{ }包围起来的部分有时也称为类体,和函数体的概念类似。public也是 C++ 的新增关键字,它只能用在类的定义中,表示类的成员变量或成员函数具有“公开”的访问权限。

注意在类定义的最后有一个分号;,它是类定义的一部分,表示类定义结束了,不能省略。

上面的代码创建了一个 Student 类,它包含了 3 个成员变量和 1 个成员函数。

类只是一个模板(Template),编译后不占用内存空间,所以在定义类时不能对成员变量进行初始化,因为没有地方存储数据。只有在创建对象以后才会给成员变量分配内存,这个时候就可以赋值了。

类可以理解为一种新的数据类型,该数据类型的名称是 Student。与 char、int、float 等基本数据类型不同的是,Student 是一种复杂数据类型,可以包含基本类型。

创建对象

有了 Student 类后,就可以通过它来创建对象了,例如:

Student lisi;  //创建对象

Student是类名,lisi是对象名。这和使用基本类型定义变量的形式类似:

int a;  //定义整型变量

我们可以把 Student 看做一种新的数据类型,把 lisi 看做一个变量。

在创建对象时,class 关键字可要可不要,但是出于习惯我们通常会省略掉 class 关键字,例如:

class Student Lisi;  //正确Student Lisi;  //同样正确

除了创建单个对象,还可以创建对象数组:

Student allStu[100];

该语句创建了一个 allStu 数组,它拥有100个元素,每个元素都是 Student 类型的对象。

访问类的成员

创建对象以后,可以使用点号.来访问成员变量和成员函数,如下所示:

#include <iostream>
using namespace std;//类通常定义在函数外面
class Student{public://类包含的变量char *name;int age;float score;//类包含的函数void say(){cout<<name<<"的年龄是"<<age<<",成绩是"<<score<<endl;}
};int main(){//创建对象Student stu;stu.name = "小王";stu.age = 15;stu.score = 89f;stu.say();return 0;
}

运行结果:

小王的年龄是15,成绩是89

stu 是一个对象,占用内存空间,可以对它的成员变量赋值,也可以读取它的成员变量。

类通常定义在函数外面,当然也可以定义在函数内部。

使用对象指针

C语言中经典的指针在 C++ 中仍然广泛使用,尤其是指向对象的指针,没有它就不能实现某些功能。

上面代码中创建的对象 stu 在栈上分配内存,需要使用&获取它的地址,例如:

Student stu;
Student *pStu = &stu;

pStu 是一个指针,它指向 Student 类型的数据,也就是通过 Student 创建出来的对象。

当然,你也可以在堆上创建对象,这个时候就需要使用new关键字,例如:

Student *pStu = new Student;

在栈上创建出来的对象都有一个名字,比如 stu,使用指针指向它不是必须的。但是通过 new 创建出来的对象就不一样了,它在堆上分配内存,没有名字,只能得到一个指向它的指针,所以必须使用一个指针变量来接收这个指针,否则以后再也无法找到这个对象了,更没有办法使用它。也就是说,使用 new 在堆上创建出来的对象是匿名的,没法直接使用,必须要用一个指针指向它,再借助指针来访问它的成员变量或成员函数。

栈内存是程序自动管理的,不能使用 delete 删除在栈上创建的对象;堆内存由程序员管理,对象使用完毕后可以通过 delete 删除。在实际开发中,new 和 delete 往往成对出现,以保证及时删除不再使用的对象,防止无用内存堆积。

有了对象指针后,可以通过箭头->来访问对象的成员变量和成员函数,示例:

pStu -> name = "小明";
pStu -> age = 15;
pStu -> score = 92.5f;
pStu -> say();

下面是一个完整的例子:

#include <iostream>
using namespace std;class Student{public:char *name;int age;float score;void say(){cout<<name<<"的年龄是"<<age<<",成绩是"<<score<<endl;}
};int main(){Student *pStu = new Student;pStu -> name = "小李";pStu -> age = 15;pStu -> score = 97f;pStu -> say();delete pStu;  //删除对象return 0;
}

运行结果:

小李的年龄是15,成绩是97

C++类的定义和对象的创建相关推荐

  1. 例子 类的定义与对象的创建 狗的例子

    例子 类的定义与对象的创建 狗的例子 类的定义 public class dog {String name;int age;boolean sex;String color;public void e ...

  2. Java面向对象思想、类的定义、对象的使用、对象内存图、成员变量和局部变量的区别、封装、private关键字、this关键字、构造方法、JavaBean-day06

    目录 第1节 面向对象思想 1.1 面向对象思想概述 概述 举例 特点 1.2 类和对象 什么是对象 类与对象的关系 1.3 类的定义 事物与类的对比 类的定义格式 1.4 对象的使用 对象的使用格式 ...

  3. java之类的定义和对象的创建

    类的基本结构 如果一切都是对象,那么是什么决定某一类对象的行为与外观呢?答案时"类".类是构造对象的模板或蓝图.就像建筑物与设计图纸,通过一份设计图纸,可以构造处建筑物,而Java ...

  4. 【C++学习】类与对象(一)——类的定义与对象实例

    一.面向对象程序设计的基本特点 1.1 抽象 面向对象方法中的抽象 ,是指对具体问题(对象)进行概括,抽出一类对象的公共性质并加以描述的过程. 一个问题的抽象包括:数据抽象和行为抽象(或被称为功能抽象 ...

  5. python类的定义和创建_Python类对象的创建和使用

    通过前面章节的学习,我们已经学会如何定义一个类,但要想使用它,必须创建该类的对象. 创建类对象的过程,又称为类的实例化. 类名(参数) 定义类时,如果没有手动添加 __init__() 构造方法,又或 ...

  6. 定义一个矩形类Rectangle:(知识点:对象的创建和使用)

    /** 1:定义一个矩形类Rectangle:(知识点:对象的创建和使用)     定义三个方法:getArea()求面积.getPer()求周长,showAll()分别在控制台输出长.宽.面积.周长 ...

  7. JAVA中同目录下定义类,以及对象的创建与使用,内存图的原理

    JAVA中同目录下定义类,以及对象的创建与使用(听课笔记) JAVA中对象的创建与使用(听课笔记) 示例一 同文件目录下,创建了三个类OOTest01,User,Address类,之间的调用 示例二 ...

  8. 某IT公司有多名员工,按员工负责的工作不同,进行了部门的划分(研发部员工、维护部员工)。完成员工体系中所有类的定义,并指定类之间的继承关系。进行xx工程师类的对象创建,完成工作方法的调用。

    某IT公司有多名员工,按员工负责的工作不同,进行了部门的划分(研发部员工.维护部员工).研发部根据所需研发的内容不同,又分为JavaEE工程师.Android工程师:维护部根据所需维护的内容不同,又分 ...

  9. 创建一个矩形类的子类——正方形类,类中定义求面积方法、重写求周长的方法.在主类中,输入一个正方形边长,创建正方形对象,求正方形的面积和周长

    题目: 编写一个应用程序,创建一个矩形类,类中具有长.宽两个成员变量和求周长的方法.再创建一个矩形类的子类--正方形类,类中定义求面积方法.重写求周长的方法.在主类中,输入一个正方形边长,创建正方形对 ...

最新文章

  1. R语言问题解决:Error: Discrete value supplied to continuous scale
  2. snappy 在linux安装及使用
  3. Cassandra 的数据存储结构——本质是SortedMapRowKey, SortedMapColumnKey, ColumnValue
  4. sql 脚本编写之路 常用语句(一) 1.用一个表中的某一列更新另外一个表的某些列:...
  5. Andriod --- JetPack (四):BaseObservable 与 ObservableField 双向绑定
  6. 文本挖掘预处理流程总结(1)— 中文
  7. 使用Python重命名MP3标签
  8. sharepoint 概念及认证方式介绍
  9. HDU4607 Park Visit(解法二)【废除!!!】
  10. 64位和32位的区别
  11. [转载红鱼儿]kbmmw 开发点滴:kbmMW在事务中批量执行SQL
  12. 域共享文件夹服务器怎么设置密码,域环境下共享文件夹加密、Windows 2008 Server局域网共享文件夹设置权限设置的方法...
  13. 将背景为白色图片转为png格式的透明图片
  14. Python数据处理之数据聚合
  15. 查看计算机当前用户的sid,查看SID
  16. 教你看懂Code128条形码
  17. Spark中RDD的sortBy排序的5种实现方法
  18. 小型企业5种实惠的品牌建立策略
  19. 帆软内SQL语句的使用
  20. 百度地图setMapStyle

热门文章

  1. firefox火狐浏览器怎么清除缓存 火狐浏览器清理cookie教程
  2. jeecg自定义结果集t:dictSelect
  3. Vue-cli项目中路由的基础用法,以及路由嵌套
  4. SXSSFWorkbook使用——使用excel模板
  5. php实现注销功能,laravel 实现用户登录注销并限制功能
  6. html文件怎么导出stl文件,3D建模软件导出STL文件的小技巧(一)
  7. lavarel php区别,laravel中{{}}和{!! !!}的区别详解
  8. 32位python和64位python区别_python32位和64位有什么区别
  9. JAVA八种基本类型
  10. html大小写字符串转换成整数,c++字符串大小写转换