C++类的定义和对象的创建
类的定义
类是用户自定义的类型,如果程序中要用到类,必须提前说明,或者使用已存在的类(别人写好的类、标准库中的类等),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++类的定义和对象的创建相关推荐
- 例子 类的定义与对象的创建 狗的例子
例子 类的定义与对象的创建 狗的例子 类的定义 public class dog {String name;int age;boolean sex;String color;public void e ...
- Java面向对象思想、类的定义、对象的使用、对象内存图、成员变量和局部变量的区别、封装、private关键字、this关键字、构造方法、JavaBean-day06
目录 第1节 面向对象思想 1.1 面向对象思想概述 概述 举例 特点 1.2 类和对象 什么是对象 类与对象的关系 1.3 类的定义 事物与类的对比 类的定义格式 1.4 对象的使用 对象的使用格式 ...
- java之类的定义和对象的创建
类的基本结构 如果一切都是对象,那么是什么决定某一类对象的行为与外观呢?答案时"类".类是构造对象的模板或蓝图.就像建筑物与设计图纸,通过一份设计图纸,可以构造处建筑物,而Java ...
- 【C++学习】类与对象(一)——类的定义与对象实例
一.面向对象程序设计的基本特点 1.1 抽象 面向对象方法中的抽象 ,是指对具体问题(对象)进行概括,抽出一类对象的公共性质并加以描述的过程. 一个问题的抽象包括:数据抽象和行为抽象(或被称为功能抽象 ...
- python类的定义和创建_Python类对象的创建和使用
通过前面章节的学习,我们已经学会如何定义一个类,但要想使用它,必须创建该类的对象. 创建类对象的过程,又称为类的实例化. 类名(参数) 定义类时,如果没有手动添加 __init__() 构造方法,又或 ...
- 定义一个矩形类Rectangle:(知识点:对象的创建和使用)
/** 1:定义一个矩形类Rectangle:(知识点:对象的创建和使用) 定义三个方法:getArea()求面积.getPer()求周长,showAll()分别在控制台输出长.宽.面积.周长 ...
- JAVA中同目录下定义类,以及对象的创建与使用,内存图的原理
JAVA中同目录下定义类,以及对象的创建与使用(听课笔记) JAVA中对象的创建与使用(听课笔记) 示例一 同文件目录下,创建了三个类OOTest01,User,Address类,之间的调用 示例二 ...
- 某IT公司有多名员工,按员工负责的工作不同,进行了部门的划分(研发部员工、维护部员工)。完成员工体系中所有类的定义,并指定类之间的继承关系。进行xx工程师类的对象创建,完成工作方法的调用。
某IT公司有多名员工,按员工负责的工作不同,进行了部门的划分(研发部员工.维护部员工).研发部根据所需研发的内容不同,又分为JavaEE工程师.Android工程师:维护部根据所需维护的内容不同,又分 ...
- 创建一个矩形类的子类——正方形类,类中定义求面积方法、重写求周长的方法.在主类中,输入一个正方形边长,创建正方形对象,求正方形的面积和周长
题目: 编写一个应用程序,创建一个矩形类,类中具有长.宽两个成员变量和求周长的方法.再创建一个矩形类的子类--正方形类,类中定义求面积方法.重写求周长的方法.在主类中,输入一个正方形边长,创建正方形对 ...
最新文章
- R语言问题解决:Error: Discrete value supplied to continuous scale
- snappy 在linux安装及使用
- Cassandra 的数据存储结构——本质是SortedMapRowKey, SortedMapColumnKey, ColumnValue
- sql 脚本编写之路 常用语句(一) 1.用一个表中的某一列更新另外一个表的某些列:...
- Andriod --- JetPack (四):BaseObservable 与 ObservableField 双向绑定
- 文本挖掘预处理流程总结(1)— 中文
- 使用Python重命名MP3标签
- sharepoint 概念及认证方式介绍
- HDU4607 Park Visit(解法二)【废除!!!】
- 64位和32位的区别
- [转载红鱼儿]kbmmw 开发点滴:kbmMW在事务中批量执行SQL
- 域共享文件夹服务器怎么设置密码,域环境下共享文件夹加密、Windows 2008 Server局域网共享文件夹设置权限设置的方法...
- 将背景为白色图片转为png格式的透明图片
- Python数据处理之数据聚合
- 查看计算机当前用户的sid,查看SID
- 教你看懂Code128条形码
- Spark中RDD的sortBy排序的5种实现方法
- 小型企业5种实惠的品牌建立策略
- 帆软内SQL语句的使用
- 百度地图setMapStyle
热门文章
- firefox火狐浏览器怎么清除缓存 火狐浏览器清理cookie教程
- jeecg自定义结果集t:dictSelect
- Vue-cli项目中路由的基础用法,以及路由嵌套
- SXSSFWorkbook使用——使用excel模板
- php实现注销功能,laravel 实现用户登录注销并限制功能
- html文件怎么导出stl文件,3D建模软件导出STL文件的小技巧(一)
- lavarel php区别,laravel中{{}}和{!! !!}的区别详解
- 32位python和64位python区别_python32位和64位有什么区别
- JAVA八种基本类型
- html大小写字符串转换成整数,c++字符串大小写转换