|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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++编译器会给每一个空对象分配一个字节空间,是为了区分空对象内存的位置。每个空对象也应该有一个独一无二的内存地址。
渣渣一个,请各位大佬赐教
|
|