鱼C论坛

 找回密码
 立即注册
查看: 1025|回复: 1

[技术交流] C++旅程第六站-----类类类

[复制链接]
发表于 2020-5-7 22:06:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 这是她 于 2020-5-9 20:42 编辑

If you want to succeed,you should strike out on new paths rather than travel the worn paths of accepted success.       ----John D.Rockefeller

                                                   
       简单的来介绍一下

        类------可以用class和struct定义
      
  1. class Person
  2. {
  3.         int name;//class定义一个类,他所定义的成员默认为私有private.
  4. }

  5. struct Student
  6. {
  7.         int age;//struct定义一个类,他所定义的成员默认为公共public.
  8. }
复制代码
      简单介绍一下:

  1. #include<iostream>
  2. #include<string>

  3. using namespace std;

  4. //定义了一个类,使用class关键字来标识类,类的首字母一般大写
  5. class Student
  6. {
  7.         private://关键字private标识只能通过公共成员访问的类成员---把数据隐藏起来
  8.                 string name;
  9.                 int id;
  10.                 int c_grade,m_grade,e_grade,total;
  11.         
  12.         public://关键字public标识组成类的公共接口的类成员----对外开放的
  13.                 void SetMessage(string name_m,int id_m);
  14.                 void SetGrade(int c_grade_m,int m_grade,int e_grade);
  15.                 void GetMessage();
  16.                 void GetGrade();
  17.                 void print();
  18.         //一般来说,数据项放在私有部分,组成类接口的成员函数放在共有部分;当然这只是一般情况,根据情况不同放的位置不同。
  19. };

  20. //定义类成员函数,使用作用域解析运算符(::)来标识函数所属的类---(::)就跟蝌蚪找妈妈一样,通过这个运算符可以找到自己的类
  21. //类方法可以访问类的private组件---就像妈妈会把她所有的东西都给他孩子一样,就算连private的都可以访问
  22. void Student::SetMessage(string name_m,int id_m)
  23. {
  24.         name = name_m;
  25.         id = id_m;
  26. }

  27. void Student::SetGrade(int c_grade_m,int m_grade_m,int e_grade_m)
  28. {
  29.         c_grade = c_grade_m;
  30.         m_grade = m_grade_m;
  31.         e_grade = e_grade_m;
  32.         total =c_grade_m + m_grade_m + e_grade_m;
  33. }

  34. void Student::GetMessage()
  35. {
  36.         cout << "name : " << name << "  id : "  << id << endl;
  37. }

  38. void Student::GetGrade()
  39. {
  40.         cout << "Chinese grade : " << c_grade << endl;
  41.         cout << "Math grade : " << m_grade << endl;
  42.         cout << "English grade : " << e_grade << endl;
  43.         cout << "sum of grade : " << total << endl;
  44. }

  45. void Student::print()
  46. {
  47.         cout << "name : " << name << "  id :  " << id << endl;
  48.         cout << "Chinese grade : " << c_grade << endl;
  49.         cout << "Math grade : " << m_grade << endl;
  50.         cout << "English grade : " << e_grade << endl;
  51.         cout << "The sum of grade is : " << total << endl;
  52. }

  53. int main()
  54. {
  55.         cout << "Welcome to the Student System!!!!" << endl;
  56.         Student rose;
  57.         
  58.         cout << "---------------------------------------------" << endl;
  59.         
  60.         rose.SetMessage("gorgeous",2346256);
  61.         rose.SetGrade(87,98,88);
  62.         
  63.         cout << "----------------------------------------------" << endl;
  64.         
  65.         rose.GetMessage();
  66.         rose.GetGrade();
  67.         
  68.         cout << "---------------------------------------------" << endl;
  69.         
  70.         rose.print();
  71.         
  72.         return 0;
  73. }
复制代码

         成员变量和成员函数是分开存储的


  1. class Student
  2. {
  3.         int m_a;//非静态成员变量---属于类的对象上
  4.         
  5.         static int m_b;//静态成员变量---不属于类的对象上
  6.         
  7.         void func() {}//非静态成员函数---不属于类的对象上
  8.         
  9.         static void func2() {}//静态成员函数---不属于类的对像上
  10. };
复制代码


         静态成员-------static关键字


         静态成员变量
         特点:
         1、所有对象共享一份数据;
         2、在编译阶段分配内存;
         3、类内声明类外初始化;

          静态成员函数
          特点:
          1、所有对象共享一个函数;
          2、静态成员函数只能访问静态成员变量

  1. #include<iostream>

  2. using namespace std;

  3. class Student
  4. {
  5. public:
  6.         //静态成员函数----static关键字
  7.         static void func1()
  8.         {
  9.                 m_a = 666;//静态成员函数可以访问静态成员变量
  10.                 //m_q = 888;//静态成员函数不可以访问非静态成员变量---无法区分到底是哪个对象的m_q属性
  11.                 cout << "m_a : " << m_a << endl;
  12.                 cout << "这是一个静态成员函数!!!" << endl;
  13.         }
  14.        
  15.         static int m_a;//静态成员变量---类内要声明
  16.         int m_q;//非静态成员变量
  17.        
  18. private:
  19.         //静态成员变量是有访问权限的
  20.         static int m_p;
  21.        
  22.         //静态成员函数也是有访问权限的
  23.         static void func2()
  24.         {
  25.                 cout << "这个是private中的静态成员函数!!!!" << endl;
  26.         }
  27. };

  28. //类外初始化---静态成员变量
  29. int Student::m_a = 10;
  30. int Student::m_p = 20;

  31. int main()
  32. {
  33.         //1、通过对象进行访问静态成员变量
  34.         Student a;
  35.         cout << a.m_a << endl;
  36.        
  37.         //2、通过类名进行访问静态成员变量
  38.         cout << Student::m_a << endl;
  39.        
  40.         //cout << Student::m_p << endl;//类访问不到私有的静态成员变量
  41.        
  42.         //1、通过对象访问静态成员函数
  43.         Student b;
  44.         b.func1();
  45.        
  46.         //2、通过类名访问静态成员函数
  47.         Student::func1();
  48.        
  49.         //Student::func2();//类外访问不到私有静态成员函数
  50.        
  51.         return 0;       
  52. }
复制代码



空对象占用的内存空间是1个字节----C++编译器会给每一个空对象分配一个字节空间,是为了区分空对象内存的位置。每个空对象也应该有一个独一无二的内存地址。

                                          渣渣一个,请各位大佬赐教





本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-10 18:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表