C ++ 类 | 类的创建和使用_1
C ++ 中的 类 是用户定义的数据类型。 它可以有数据和函数。这听起来有点抽象,所以让我们看一个类的例子。让我们创建一个名为 'Student' 的类型。我们希望获得与每个学生相关的信息。 所以我们说我们的学生数据类型有:
- a name
- an id number
- a graduation date
这三个是 学生类 的成员:
class Student
{string name;int id;int gradDate;
};
关于C ++类的好处,默认是使所有成员都是私有的。这意味着只有该类的其他成员才能访问该数据。听起来很糟糕....我们的数据类型包含我们无法访问的数据。 但是,请记住,我说过C ++类可以有 函数 和 数据 。
我们可以使用函数来访问类中的数据。
访问 和 修改类中数据值的函数称为 mutators 。mutator 顾名思义,就是指能够改变类成员数据的类成员函数。说到mutator,就要提到 accessor,C++的类 accessor 和 mutator,其实对应的分别就是 get 和 set 性质的函数;前者是只读性质的函数,而后者则是只写性质的。这也是C++类的封装特性的具体表现。
现在让我们将 setName 函数(类中的函数也称为方法)添加到 Student 类中。 回想一下,类中成员的默认值是私有的。 我们希望访问函数是公有的。所以,我们添加了关键字 "public", 所有成员在 "public" 下面列出的都是可访问的:
class Student
{string name;int id;int gradDate;public:void setName(string name);};
让我们创建一些函数来改变我们名为 Student 的类中的数据值,传统上,setDataName 是我们用来更改类中数据的。
在我们的例子中,我们有三个数据值:
- name
- id
- gradDate
所以让我们创建一个函数来改变 name 的值:这只是通常的 C ++ 函数。 它接受输入字符串 并且 不返回任何内容。
注意,这个时候你可能会问,void 是什么?
答:void是空的意思,一般用来表示无参数或者无返回。
比如在函数定义的时候可以用 void func(void); 前面的表示函数无返回,括号里表示函数无参数。或者 void * 可以表示无类型指针,允许被强制转化成任意类型指针。
void setName(std::string nameIn)
现在让我们添加一个函数来评估 Student类 中的每个数据值,一个类的示例:
class Student
{string name;int id;int gradDate;public:void setName(string nameIn);void setId(int idIn);void setGradDate(int dateIn);
};
因此,我们可以设置数据,但现在我们需要 "get" 数据。 传统上这些被称为 get-functions。它们的格式为 getDataValue。获取函数返回数据,因此 get 函数将变量类型作为返回变量。例如:要访问名为 name 的数据,函数声明将是:
string getName();
如果我们为每个数据成员执行 get 函数,则 Student类 应如下所示,一个类的例子:
class Student
{string name;int id;int gradDate;public:void setName(string nameIn);void setId(int idIn);void setGradDate(int dateIn);string getName();int getId();int getGradDate();void print();
};
我们已经声明了我们的 成员 和 函数 ,现在我们需要定义它们。 以下是我们的学生班:
class Student
{string name;int id;int gradDate;public:void setName(string nameIn);void setId(int idIn);void setgradDate(int dateIn);string getName();int getId();int getGradDate();
};
现在让我们先定义修改函数成员:
void Student::setName(string nameIn)
{name = nameIn;
}void Student::setId(int idIn)
{id = idIn;
}void Student::setGradDate(int gradDateIn)
{gradDate = gradDateIn;
}
然后让我们再来定义访问函数成员:
string Student::getName()
{return name;
}int Student::getId()
{return id;
}int Student::getGradDate()
{return gradDate;
}
让我们来看看我们到目前为止在学生班中所拥有的内容。
class Student
{string name;int id;int gradDate;public:void setName(string nameIn);void setId(int idIn);void setgradDate(int dateIn);
};Student::setName(string nameIn)
{name = nameIn;
}Student::setID(int idIn)
{id = idIn;
}Student::setGradeDate(int gradDateIn)
{gradDate = gradDateIn;
}
我们的学生班已准备就绪。还有一个我想要添加到类中的函数成员,它不是必需的,但它很好。该函数称为打印。此函数将打印类中的所有数据值。
void print()
{cout<<name<<" "<<id<<" "<<gradDate;
}
请注意,此函数仅打印数据值,并在它们之间留一个空格。 它不会添加换行符或文本。 这是 C ++ 基本打印函数的标准配置。 我们必须认为其他人可能想要使用这个功能,我们应该尽可能保持中立。
class Student
{string name;int id;int gradDate;public:void setName(string nameIn);void setId(int idIn);void setGradDate(int dateIn);string getName();int getId();int getGradDate();void print();
};void Student::setName(string nameIn)
{name = nameIn;
}void Student::setId(int idIn)
{id = idIn;
}void Student::setGradDate(int gradDateIn)
{gradDate = gradDateIn;
}void Student::print()
{cout<<name<<" "<<id<<" "<<gradDate;
}string Student::getName()
{return name;
}int Student::getId()
{return id;
}int Student::getGradDate()
{return gradDate;
}
总结,类的语法是:
class ClassName
{member1;member2;...public:return variable accessFunction1(function parameters);return variable accessFunction2(function parameters); ...
} ;returnVariable ClassName:: accessFunction1(function parameters)
{function statements;
}returnVariable ClassName:: accessFunction2(function parameters)
{function statements;
}...
另外,一些约定首先列出公共定义,包括谷歌C++ 样式指南,最好使用这种约定。
C ++ 约定是:
- 大写类名的第一个字母。
class ClassName
- 私有成员首先列出。 如果您这样做,则无需使用 'private' 关键字。 如果您在 public 关键字后面列出它们,则需要使用private 关键字来标识它们。
{member1;member2;...
- 使用 'getVariableName' 访问私有变量,使用 'setVariableName' 为私有变量赋值。
public:return variable accessFunction1(function parameters);return variable accessFunction2(function parameters); ... } ;
- 您需要使用命名空间classname ::来表示函数是类定义的一部分。
returnVariable ClassName:: accessFunction1(function parameters) {function statements; }returnVariable ClassName:: accessFunction2(function parameters) {function statements; }
通常将类放在头文件中。 对于这个例子,我们将把它们放在主文件中,这样我们就可以同时看到主程序 和 类。 希望这会让我们更容易看到程序中发生了什么。 请注意,我们需要使用 " . " 来访问公共成员。例如,要获取学生班级中毕业日期的值,我们需要输入:
studentVariableName.getGradDate();
还有另一个运算符( - >)用于访问类的指针成员。 我们将在二进制查找树中讨论该运算符。以下是完整例子:
#include<iostream>
using namespace std;class Student
{string name;int id;int gradDate;public:void setName(string nameIn);void setId(int idIn);void setGradDate(int dateIn);string getName();int getId();int getGradDate();void print();
};void Student::setName(string nameIn)
{name = nameIn;
}void Student::setId(int idIn)
{id = idIn;
}void Student::setGradDate(int gradDateIn)
{gradDate = gradDateIn;
}void Student::print()
{cout<<name<<" "<<id<<" "<<gradDate;
}string Student::getName()
{return name;
}int Student::getId()
{return id;
}int Student::getGradDate()
{return gradDate;
}int main()
{int integer1; float float1;Student student1; integer1 = 4; //assign a value to integer1float1 = 4.333; //assign a value to float1student1.setName("Catherine Gamboa"); //assign a value to the student namestudent1.setId(54345); //assign a value to the student id numberstudent1.setGradDate(2017); //assign a value to the student grad date//Let's print the values of our variablescout<<"integer1 = "<<integer1<<"\n";cout<<"float1 = "<<float1<<"\n\n";//There are two ways we can print the values of our class://The first is to call the print function we created.cout<<"Using the Student::print function\n";cout<<"Student1 = ";student1.print();cout<<"\n\n";//The second is to access each member of the class using the get functionscout<<"Using the student access functions\n";cout<<"Student1 name = "<<student1.getName()<<"\n";cout<<"Student1 ID = "<<student1.getId()<<"\n";cout<<"Student1 Grad Date = "<<student1.getGradDate()<<"\n";return 0;
}
运行结果:
再来看另外一个例子,
#include<iostream>using namespace std;class Dog
{string name;int licenseNumber;
public:void setName(string nameIn);void setLicenseNumber(int licenseNumberIn);string getName();int getLicenseNumber();void printInfo();
};void Dog::setName(string nameIn)
{//ToDo: finish this functionname = nameIn;
}void Dog::setLicenseNumber(int licenseNumberIn)
{//ToDo: finish this functionlicenseNumber = licenseNumberIn;
}string Dog::getName()
{//ToDo: finish this functionreturn name;
}int Dog::getLicenseNumber()
{//ToDo: finish this functionreturn licenseNumber;
}void Dog::printInfo()
{//ToDo: finish this functioncout<< name <<" "<< licenseNumber<<"\n";
}
上面这个例子的类作为头文件,头文件名为:main.hpp。
#include"main.hpp"int main()
{Dog dog1;dog1.setName("Trixie");dog1.setLicenseNumber(1234);dog1.printInfo();Dog dog2;dog2.setName("Kali");dog2.setLicenseNumber(5678);dog2.printInfo();return 0;
}
这里使用头文件,#include"main.hpp"。然后我们直接调用来使用,运行结果:
有编过程的人的代码,比那些无知的人使用的软件更有价值。
C ++ 类 | 类的创建和使用_1相关推荐
- 关于解决SpringDataJpa框架实体类表字段创建顺序与数据库表字段展示顺序不一致的问题
关于解决SpringDataJpa框架实体类表字段创建顺序与数据库表字段展示顺序不一致的问题 参考文章: (1)关于解决SpringDataJpa框架实体类表字段创建顺序与数据库表字段展示顺序不一致的 ...
- C++ 特殊类设计:只能在堆、栈上创建的类、无法继承的类、无法拷贝的类、只能创建一个对象的类
文章目录 请设计一个类,不能被拷贝 请设计一个类,不能被继承 请设计一个类,只能在堆上创建对象 请设计一个类,只能在栈上创建对象 请设计一个类,只能创建一个对象 饿汉模式 懒汉模式 请设计一个类,不能 ...
- c++类对象的创建方式
对象创建限制在堆或栈 c++类对象的创建方式 对象创建限制在堆或栈 C++ 中的类的对象的建立模式 如何将类限制在堆上呢? C++ 中的类的对象的建立模式 C++ 中的类的对象的建立模式分为两张:静态 ...
- java学习(142):file类的基本创建
//file类的基本创建 import java.io.File;public class test85 {public static void main(String[] args){//创建文件对 ...
- 懒加载和预加载的区别_类的动态创建(ro,rw)amp; 懒加载类和非懒加载类底层加载的区别 amp; 类和分类的搭配分析...
黑客技术点击右侧关注,了解黑客的世界! Java开发进阶点击右侧关注,掌握进阶之路! Python开发点击右侧关注,探讨技术话题!作者丨OSMin链接:https://juejin.im/post/5 ...
- Excel宏(VBA)类模块的创建与调用
Excel宏VBA类模块的创建与调用 1 类模块的介绍 2 为什么要使用类模块 3 如何创建类模块 4 如何调用类模块 5 代码 1 类模块的介绍 2 为什么要使用类模块 3 如何创建类模块 类模块的 ...
- C++类对象的创建与释放过程
C++类对象的创建与释放过程 类的定义与实例化 类对象的创建方法 类对象的创建过程 类对象的释放过程 析构函数 缺省析构函数 类的定义与实例化 类对象的创建方法 1.在栈上创建 类名 对象; // 无 ...
- 小白对于学习对象和类的总结,定义一个圆柱体类Cylinder,并创建相应的对象,然后计算圆柱体的底面积和面积.
类和对象 类:类的概念就是让程序设计能更清楚卖出日常生活中的事物,也可以理解为对一类事物的统称包含对于属性描述和行为描述!注解:属性描述:描述当前类有哪些属性.行为描述:描述当前有哪些行为.举例: 以 ...
- AD(十一)常见CHIP类封装的创建(封装的组成成分、焊盘属性、画焊盘、画丝印、测距)
软件:Altium Designer 16 往期博客: AD(一) AD的工程创建 AD(二)电阻.电容 模型的创建 AD(三)IC类元件模型创建 AD(四)排针类元件模型的创建 AD(五)光耦元件模 ...
- AD(十二)常见IC类封装的创建(+元件复制、粘贴、定向移动、阵列粘贴【详细】)
软件:Altium Designer 16 往期博客: AD(一) AD的工程创建 AD(二)电阻.电容 模型的创建 AD(三)IC类元件模型创建 AD(四)排针类元件模型的创建 AD(五)光耦元件模 ...
最新文章
- 动态数组怎么定义_Excel VBA 数组基础知识,初学者不可不学的关键知识
- Git下载与使用(Git地址由CSDN提供)
- 绝对不可错过的图形学算法!迭代最近点算法——ICP算法
- 李彦宏说吃着火锅唱着歌,奔驰你却要我命!
- 常见的java开源组件_java开源框架有哪些?Java常用开源框架
- windows server 2003安装pc套件ovi套件全过程?
- 保存为UTF8的1byte文字,2byte文字,3byte文字,4byte文字大全
- 快速安装tensorflow-gpu
- 高等数学张宇18讲 第一讲 高等数学常用基础知识
- centos7安装jdk1.8.0并配置JAVA_HOME环境变量
- 考研英语大纲单词E~O与常用短语
- 淘宝补单怎么防止降权?如何避免降权?
- 中小企业如何做全网营销推广?常见的网络营销推广技巧和策略
- 强大的 Python 信号库:blinker 入门教程
- 30岁的万维网活不长了! 蒂姆·伯纳斯·李要借去中心化亲手杀死它, 你再也不用担心......
- 三线表里加小短线_APA格式报告.doc
- AMD锐龙Ryzen CPU系列安装黑苹果MacOS 10.14 Mojave安装教程
- Contacts(简介)
- 轻量级插件ResourceChecker
- SQLServer 导入mdf和ldf文件出现:无法打开物理文件 D:\XX.mdf。操作系统错误 5:5(拒绝访问。)的解决方案