鱼C论坛

 找回密码
 立即注册
查看: 1108|回复: 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定义
      
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++编译器会给每一个空对象分配一个字节空间,是为了区分空对象内存的位置。每个空对象也应该有一个独一无二的内存地址。

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





本帖被以下淘专辑推荐:

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 07:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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