类相当于一种物体的模版,比如人民币模版,按着这个特性和模版生产出很多人民币,比如汽车模版,根据这个车的模版,可以生产出各式各样的车型,比如人类,有身高、体重、能吃饭睡觉等。
(1)一个类就是用户自己定义的数据类型,可以把类想象成一个名字空间,包着一对内容(成员函数、成员变量)。
(2)一个类的构成,最常见的就是成员变量、成员函数这两种。当然也有很多特殊的成员函数,他们的名字也特殊,功能也特殊,这里先不讲。
(3)访问类的成员(成员函数、成员变量)时,如果用类的对象来访问,就使用“对象名.成员名”来访问成员。如果用指向这个对象的指针访问,就使用“指针名->成员名”来访问成员。
- #include <iostream>
- #include <vector>
-
- using namespace std;
-
- class student
- {
- int num;
- string name;
- public:
- void func(int stuNum,string stuName)
- {
- this->num = stuNum;
- this->name = stuName;
- cout <<"num = " << this->num <<"\r\nname= " << this->name << endl;
- }
- };
-
- int main()
- {
- student mystu1;
- mystu1.func(20,"zhangsan");//调用成员函数
-
- student *mystu2 = new student();
- mystu2 = &mystu1;
- mystu2->func(25,"xiaoming");//调用成员函数
- return 0;
- }
(4)类中public修饰符修饰的成员提供类的访问接口,暴露给外界,供外界使用,private成员提供各种实现类功能的细节方法,但不暴露给外界或者使用者,外界无法使用这些privater成员。
(5)struct(结构)的成员默认为public属性的class(类),struct的定义如下:
struct A{......};
(6)class成员默认是private属性。class的定义如下:
class A{......};
可以看出,struct A{......};等价于 class A{public:......};
建议在写代码时,尽量不要将struct和class混用。可以把没有成员函数的数据结构定义成struct,把有成员函数的数据结构定义为class。
在.h文件中声明类,如下所示:
- class student
- {
- public:
- int num; //成员变量
- string name;//成员变量
- void func();//成员函数
- };
-
- 在.cpp文件中定义实现类,如下所示:
- class student
- {
- public:
- int num; //成员变量
- string name;//成员变量
- void func()//成员函数
- {
- cout <<"调用成员函数"<< endl;
- }
- };
成员函数的调用:
- student mystu1;
- mystu1.func();
- student mystu1;
- mystu1.num = 1234;
- mystu1.name = "qiaofeng";
- cout << "class mystu1\r\n" << "num = " << mystu1.num << "\r\nname= " << mystu1.name << endl;
- mystu1.func();
-
- student mystu2;
- mystu2 = mystu1;
- cout << "class mystu2\r\n" << "num = " << mystu1.num << "\r\nname= " << mystu1.name << endl;
- mystu2.func();
-
- student mystu3(mystu1);
- cout << "class mystu3\r\n" << "num = " << mystu1.num << "\r\nname= " << mystu1.name << endl;
- mystu3.func();
-
- student mystu4(mystu1);
- cout << "class mystu4\r\n" << "num = " << mystu1.num << "\r\nname= " << mystu1.name << endl;
- mystu4.func();
-
- student mystu5{ mystu1 };
- cout << "class mystu5\r\n" << "num = " << mystu1.num << "\r\nname= " << mystu1.name << endl;
- mystu5.func();
可以看到,对象是可以复制的,上面几种写法都是对象复制,每个对象都有不同的地址,每个对象都保存在不同的内存中,彼此互不影响。而且成员变量的值都相等。
对象复制有几种方式:
“=”、“()”、“{ }”和“={ }”
- class student
- {
- int num; //私有成员变量或private: int num;
- string name;//私有成员变量或private: string name;
- public:
- void func(int stuNum,string stuName)//成员函数
- {
- this.num = stuNum;
- this.name= stuName;
- cout <<"调用成员函数"<< endl;
- }
- };
类的私有成员变量和私有成员函数只能在类中的成员函数调用,外界无法直接调用。
2022.06.30结。