类 类型:

  1. 类类型是什么?

    首先说明一下,这个名字看着很怪异,其实第一个‘类’字,和“结构体类型”中的“结构体”是一样的,这个类型就叫类。

    可以把世间万物都看成是对象。既然是对象,那么就应该有对象的类型,也就是说可以把把世间万物抽象成类型,然后归类。

    在C++中对象的类型称为类(class),用来表示一类具有共同属性和行为的类型。例如:人类,狗类,动物类,哺乳动物类等等。在C++中一般是先声明一个类类型,然后用这个类类型去定义多个对象,所以,对象就是类类型的一个实例,或者说是类类型的一个实例化的变量。

    类类型是抽象出来的,所以类类型跟C++中的其他类型一样,不占用内存空间,而对象就是类类型的实例,是真正的变量,所以是占用存储空间的。

  2. 类类型的声明:

    C++中声明一个类类型跟声明一个结构体类型很像。

    //一个学生的结构体类型Student,包含学生的一些属性,如:姓名、学好、性别、年龄
    struct Student
    {string name;int num;char sex;int age;
    };
    //将以上的结构体改成一个类类型:
    class Student
    {string name;int num;char sex;int age;
    };//声明一个学生的类类型和声明一个学生的结构体类型很像很像,表面上看就差了一个关键字:struct 和 class,另外,C++中对结构体在基于C语言中的重要扩充就是可以添加函数了,类class也是一样,如下:class Student
    {string name;int num;char sex;int age;void print_name(){cout << "name = " << name << endl;}
    };//以上class类中name, num, sex, age等如此的,叫做【属性】或者【成员变量】,而像print_name这个函数的,叫做【行为或者方法】或者【成员函数】
    
  3. 成员访问限定符:跟在谁后面的,就是哪种访问权限!

    1. public(公有):

      该限定符下的成员(遇到其他限定符,则在遇到处终止),既可以被本类中的成员函数引用,也可以被类的作用域的其他函数所引用,即从类的外部是可以调用的;

    2. private(私有):

      该限定符下的成员(遇到其他限定符,则在遇到处终止),只能被本类的成员函数所引用,类外部不能调用(友元类可以);

    3. protected(保护):

      该限定符下的成员(遇到其他限定符,则在遇到处终止),不能被类外访问,但是可以被派生类的成员函数访问。

  4. 如何决定成员变量与成员函数的访问权限:

    1. 一个类的成员不能全部为private,否则便失去定义该类的意义,成为了一个“闭关锁国”的类,所以需要提供接口函数;

    2. 也可以把一些成员设置为私有的,但是不对外提供修改的接口,因为可能这个属性或者成员变量对于类对象来说可能不想被外面知道或者修改;

    3. 将成员函数声明为私有的,这说明这个私有的成员函数只能被该类的其他成员函数所调用,是作为辅助的接口函数的,是在类的内部使用,不对外公开。

      class Student
      {public:string name;int num;int age;private:char sex;int max_num(int x, int y){return x > y ? x : y;}public:int get_max_num(int a, int b, int c){int max_ab = max_num(a, b);return max_ab > c ? max_ab : c;}void print_name(){cout << "name = " << name << endl;}
      };
      
  5. struct和class关键字的区别:

    1. 在C++中已经对struct进行了扩充,不仅可以声明成员变量,还可以声明成员函数,class关键字本身就是从struct发展而来的,所以struct支持的,class都支持。

    2. 最重要的一个区别就是:class默认的成员访问限定符是privatestruct默认的成员访问限定符是public,所以,以下的操作:Student做结构体没问题,但作不对成员修饰的类是有问题的:

      Student zhangsan = {"张三", 1001, 'm', 25};
      zhangsan.num = 29;
      int num = zhangsan.num;
      

      当使用class定义的对象时,是没有办法直接给一个私有变量赋值的:zhangshan.num = 21;

  6. 练习:

    #include<iostream>
    using namespace std;class Student{private:string name;string num;int age;bool sex;
    public:void set_nna(){cin >> name >> num >> age >>sex;}void print_msg(){cout << "The information of student:\n\tName: " << name <<"\n\tNo.: "<<num<<"\n\tAge: "<<age<<"\n\tSex: "<<sex<<endl;}};int main()
    {Student Thmos ;Thmos.set_nna();Thmos.print_msg();return 0;
    }
    


部分话术引自VC驿站:https://www.cctry.com/

C++入门Step11【类 类型】相关推荐

  1. c#图像处理入门(-bitmap类和图像像素值获取方法)

    c#图像处理入门 -bitmap类和图像像素值获取方法 一.Bitmap类 Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成.因此Bitmap是用于处理由像素数据定义 ...

  2. C++ 学习 ::【基础篇:13】:C++ 类的基本成员函数:类类型成员的初始化与构造函数问题

    本系列 C++ 相关文章 仅为笔者学习笔记记录,用自己的理解记录学习!C++ 学习系列将分为三个阶段:基础篇.STL 篇.高阶数据结构与算法篇,相关重点内容如下: 基础篇:类与对象(涉及C++的三大特 ...

  3. 学习笔记:C++初阶【C++入门、类和对象、C/C++内存管理、模板初阶、STL简介、string、vector、list、stack、queueu、模板进阶、C++的IO流】

    文章目录 前言 一.C++入门 1. C++关键字 2.命名空间 2.1 C语言缺点之一,没办法很好地解决命名冲突问题 2.2 C++提出了一个新语法--命名空间 2.2.1 命名空间概念 2.2.2 ...

  4. Scala类型系统——高级类类型(higher-kinded types)

    高级类类型就是使用其他类型构造成为一个新的类型,因此也称为 类型构造器(type constructors).它的语法和高阶函数(higher-order functions)相似,高阶函数就是将其它 ...

  5. Swift入门篇-基本类型(1)

    原文:Swift入门篇-基本类型(1) 博主语文一直都不好(如有什么错别字,请您在下评论)望您谅解,没有上过什么学的 今天遇到了一个很烦的事情是,早上10点钟打开电脑,一直都进入系统(我的系统  ma ...

  6. C#“.NET研究”类类型

    类类型是由字段数据(成员变量)和操作字段数据的成员(属性.方法.构造函数.事件等)所构成的自定义类型.其中字段数据表示类实例(对象)的状态. 在C#中,类使用class关键字定义,例如: public ...

  7. 拷贝构造函数的第一个参数必须是自身类类型的引用

    拷贝构造函数的第一个参数必须是自身类类型的引用 拷贝构造函数的定义:如果一个构造函数的第一个参数是自身类类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数 第一个参数必须是自身类类型的引 ...

  8. Java从键盘输入n行字符串_Java十四天零基础入门-Java布尔类型

    不闲聊!!!不扯淡!!!小UP只分享Java相关的资源干货 Java布尔类型 在Java语言中布尔类型的值只包括true和false,没有其他值,不包括1和0,布尔类型的数据在开发中主要使用在逻辑判断 ...

  9. 如何设计好词袋模型BoW模型的类类型

    回顾过去自己写过的一些词袋模型,比如BoW图像检索Python实战.图像检索(CBIR)三剑客之BoF.VLAD.FV以及Bag of Words cpp实现,这些写出来的要么只是助于自己理解词袋模型 ...

最新文章

  1. PHP多图片上传 并检查 加水印 源码
  2. excel的if函数中android,excel中if函数嵌套式使用教程
  3. 招财铃:即时通信整合,
  4. 试卷批分(c++打表版)
  5. MySQL--更新自增列的潜在风险
  6. linux中asm数据库卸载教程,删除Linux非rac环境下的ASM实例
  7. 多线程跑调度_java多线程中的调度策略
  8. iOS之 开发学习笔记-block
  9. python能制作ppt动画效果吗_你听说过Python可以做动画吗
  10. Linux运维学习笔记
  11. Atitit 算法原理与导论 目录 1. Attilax总结的有用算法 按用途分类 1 1.1. 排序算法 字符串匹配(String Matching) 1 1.2. 加密算法 编码算法 序列
  12. Linux系统-Ubuntu的下载和安装
  13. js 十六进制,八进制,二进制
  14. LVGL 7.8模拟时钟
  15. 搭建个人网站--域名解析(DNS)
  16. ITRON同步和通信管理
  17. Qt 禁用ComboBox下拉选项
  18. 【STM32+机智云】机智云手机APP点灯实验踩坑记录
  19. Jmeter API文档
  20. testhISE9vHk9 15:00 5SRk4uXkZCek5SLkJ2Lk5yLlpael5WXi5SVkYuXkYuTnR83j4+P4OvhgQ==

热门文章

  1. 谷歌浏览器将网络设置为3G 或者更慢的测试网络
  2. 【游戏程序设计】Direct 3D第一人称摄像机
  3. 邮件服务器如何搭建?企业邮箱邮件服务器搭建只需几步即可
  4. 移动应用如何针对细分用户展示个性化应用内容或风格?
  5. 一键整理硬盘所有的照片和视频,手机照片的自动备份---多点相册
  6. 【沐风老师】3DMAX宇宙生成器(一键生成星系)插件使用方法详解
  7. 又一款知名云盘服务翻车:“免费不限量”变收费,用户被骗5年
  8. swift类和结构体
  9. taro不同的项目中使用不同版本的taro-cli
  10. 电商私域流量的获客运营有哪些方法