C ++ 中的 类 是用户定义的数据类型。 它可以有数据和函数。这听起来有点抽象,所以让我们看一个类的例子。让我们创建一个名为 'Student' 的类型。我们希望获得与每个学生相关的信息。 所以我们说我们的学生数据类型有:

  • a name
  • an id number
  • a graduation date

这三个是 学生类 的成员:

class Student
{string name;int id;int gradDate;
};

关于C ++类的好处,默认是使所有成员都是私有的。这意味着只有该类的其他成员才能访问该数据。听起来很糟糕....我们的数据类型包含我们无法访问的数据。 但是,请记住,我说过C ++类可以有 函数 和 数据 。

我们可以使用函数来访问类中的数据。

访问 和 修改类中数据值的函数称为 mutatorsmutator 顾名思义,就是指能够改变类成员数据的类成员函数。说到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相关推荐

  1. 关于解决SpringDataJpa框架实体类表字段创建顺序与数据库表字段展示顺序不一致的问题

    关于解决SpringDataJpa框架实体类表字段创建顺序与数据库表字段展示顺序不一致的问题 参考文章: (1)关于解决SpringDataJpa框架实体类表字段创建顺序与数据库表字段展示顺序不一致的 ...

  2. C++ 特殊类设计:只能在堆、栈上创建的类、无法继承的类、无法拷贝的类、只能创建一个对象的类

    文章目录 请设计一个类,不能被拷贝 请设计一个类,不能被继承 请设计一个类,只能在堆上创建对象 请设计一个类,只能在栈上创建对象 请设计一个类,只能创建一个对象 饿汉模式 懒汉模式 请设计一个类,不能 ...

  3. c++类对象的创建方式

    对象创建限制在堆或栈 c++类对象的创建方式 对象创建限制在堆或栈 C++ 中的类的对象的建立模式 如何将类限制在堆上呢? C++ 中的类的对象的建立模式 C++ 中的类的对象的建立模式分为两张:静态 ...

  4. java学习(142):file类的基本创建

    //file类的基本创建 import java.io.File;public class test85 {public static void main(String[] args){//创建文件对 ...

  5. 懒加载和预加载的区别_类的动态创建(ro,rw)amp; 懒加载类和非懒加载类底层加载的区别 amp; 类和分类的搭配分析...

    黑客技术点击右侧关注,了解黑客的世界! Java开发进阶点击右侧关注,掌握进阶之路! Python开发点击右侧关注,探讨技术话题!作者丨OSMin链接:https://juejin.im/post/5 ...

  6. Excel宏(VBA)类模块的创建与调用

    Excel宏VBA类模块的创建与调用 1 类模块的介绍 2 为什么要使用类模块 3 如何创建类模块 4 如何调用类模块 5 代码 1 类模块的介绍 2 为什么要使用类模块 3 如何创建类模块 类模块的 ...

  7. C++类对象的创建与释放过程

    C++类对象的创建与释放过程 类的定义与实例化 类对象的创建方法 类对象的创建过程 类对象的释放过程 析构函数 缺省析构函数 类的定义与实例化 类对象的创建方法 1.在栈上创建 类名 对象; // 无 ...

  8. 小白对于学习对象和类的总结,定义一个圆柱体类Cylinder,并创建相应的对象,然后计算圆柱体的底面积和面积.

    类和对象 类:类的概念就是让程序设计能更清楚卖出日常生活中的事物,也可以理解为对一类事物的统称包含对于属性描述和行为描述!注解:属性描述:描述当前类有哪些属性.行为描述:描述当前有哪些行为.举例: 以 ...

  9. AD(十一)常见CHIP类封装的创建(封装的组成成分、焊盘属性、画焊盘、画丝印、测距)

    软件:Altium Designer 16 往期博客: AD(一) AD的工程创建 AD(二)电阻.电容 模型的创建 AD(三)IC类元件模型创建 AD(四)排针类元件模型的创建 AD(五)光耦元件模 ...

  10. AD(十二)常见IC类封装的创建(+元件复制、粘贴、定向移动、阵列粘贴【详细】)

    软件:Altium Designer 16 往期博客: AD(一) AD的工程创建 AD(二)电阻.电容 模型的创建 AD(三)IC类元件模型创建 AD(四)排针类元件模型的创建 AD(五)光耦元件模 ...

最新文章

  1. 动态数组怎么定义_Excel VBA 数组基础知识,初学者不可不学的关键知识
  2. Git下载与使用(Git地址由CSDN提供)
  3. 绝对不可错过的图形学算法!迭代最近点算法——ICP算法
  4. 李彦宏说吃着火锅唱着歌,奔驰你却要我命!
  5. 常见的java开源组件_java开源框架有哪些?Java常用开源框架
  6. windows server 2003安装pc套件ovi套件全过程?
  7. 保存为UTF8的1byte文字,2byte文字,3byte文字,4byte文字大全
  8. 快速安装tensorflow-gpu
  9. 高等数学张宇18讲 第一讲 高等数学常用基础知识
  10. centos7安装jdk1.8.0并配置JAVA_HOME环境变量
  11. 考研英语大纲单词E~O与常用短语
  12. 淘宝补单怎么防止降权?如何避免降权?
  13. 中小企业如何做全网营销推广?常见的网络营销推广技巧和策略
  14. 强大的 Python 信号库:blinker 入门教程
  15. 30岁的万维网活不长了! 蒂姆·伯纳斯·李要借去中心化亲手杀死它, 你再也不用担心......
  16. 三线表里加小短线_APA格式报告.doc
  17. AMD锐龙Ryzen CPU系列安装黑苹果MacOS 10.14 Mojave安装教程
  18. Contacts(简介)
  19. 轻量级插件ResourceChecker
  20. SQLServer 导入mdf和ldf文件出现:无法打开物理文件 D:\XX.mdf。操作系统错误 5:5(拒绝访问。)的解决方案

热门文章

  1. 【带着canvas去流浪(11)】Three.js入门学习笔记
  2. matlab优化设计大作业答案,优化设计有哪些方法(2019优化设计答案大全)
  3. UGUI——基本组件
  4. 红橙Darren视频笔记 反射注解泛型简介
  5. 计算机图形学E6——倒水问题emm和OpenGL没啥关系
  6. 一句话解释什么是回归
  7. 每天一个知识点:Python列表两个冒号加一个负数的表达方法
  8. 五分钟没有操作自动退出_消防设施操作员 精选练习题10.31
  9. 某东商城获取eid和fp参数方法
  10. ES6语法---箭头函数/关于this指向