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