这是她 发表于 2020-5-7 22:06:45

C++旅程第六站-----类类类

本帖最后由 这是她 于 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

                                                    类
       简单的来介绍一下{:10_279:}

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

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

#include<iostream>
#include<string>

using namespace std;

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

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

void Student::SetGrade(int c_grade_m,int m_grade_m,int e_grade_m)
{
      c_grade = c_grade_m;
      m_grade = m_grade_m;
      e_grade = e_grade_m;
      total =c_grade_m + m_grade_m + e_grade_m;
}

void Student::GetMessage()
{
      cout << "name : " << name << "id : "<< id << endl;
}

void Student::GetGrade()
{
      cout << "Chinese grade : " << c_grade << endl;
      cout << "Math grade : " << m_grade << endl;
      cout << "English grade : " << e_grade << endl;
      cout << "sum of grade : " << total << endl;
}

void Student::print()
{
      cout << "name : " << name << "id :" << id << endl;
      cout << "Chinese grade : " << c_grade << endl;
      cout << "Math grade : " << m_grade << endl;
      cout << "English grade : " << e_grade << endl;
      cout << "The sum of grade is : " << total << endl;
}

int main()
{
      cout << "Welcome to the Student System!!!!" << endl;
      Student rose;
      
      cout << "---------------------------------------------" << endl;
      
      rose.SetMessage("gorgeous",2346256);
      rose.SetGrade(87,98,88);
      
      cout << "----------------------------------------------" << endl;
      
      rose.GetMessage();
      rose.GetGrade();
      
      cout << "---------------------------------------------" << endl;
      
      rose.print();
      
      return 0;
}
         成员变量和成员函数是分开存储的


class Student
{
      int m_a;//非静态成员变量---属于类的对象上
      
      static int m_b;//静态成员变量---不属于类的对象上
      
      void func() {}//非静态成员函数---不属于类的对象上
      
      static void func2() {}//静态成员函数---不属于类的对像上
};


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


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

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

#include<iostream>

using namespace std;

class Student
{
public:
        //静态成员函数----static关键字
        static void func1()
        {
                m_a = 666;//静态成员函数可以访问静态成员变量
                //m_q = 888;//静态成员函数不可以访问非静态成员变量---无法区分到底是哪个对象的m_q属性
                cout << "m_a : " << m_a << endl;
                cout << "这是一个静态成员函数!!!" << endl;
        }
       
        static int m_a;//静态成员变量---类内要声明
        int m_q;//非静态成员变量
       
private:
        //静态成员变量是有访问权限的
        static int m_p;
       
        //静态成员函数也是有访问权限的
        static void func2()
        {
                cout << "这个是private中的静态成员函数!!!!" << endl;
        }
};

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

int main()
{
        //1、通过对象进行访问静态成员变量
        Student a;
        cout << a.m_a << endl;
       
        //2、通过类名进行访问静态成员变量
        cout << Student::m_a << endl;
       
        //cout << Student::m_p << endl;//类访问不到私有的静态成员变量
       
        //1、通过对象访问静态成员函数
        Student b;
        b.func1();
       
        //2、通过类名访问静态成员函数
        Student::func1();
       
        //Student::func2();//类外访问不到私有静态成员函数
       
        return 0;       
}


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

                                          渣渣一个,请各位大佬赐教{:10_254:}





页: [1]
查看完整版本: C++旅程第六站-----类类类