✨前言✨
🎓作者:【 教主 】
☕博主水平有限,如有错误,恳请斧正。
📌机会总是留给有准备的人,越努力,越幸运!
💦导航助手💦
目录
类代表一类事物,就像人类或者动物类一样,代表的这种类型的群体,对象则是类的实例,例如下面图片中类是猫,而下面的三个则是猫类的实例对象。
在C++中,用关键字struct或者class都可以定义类,举例如下:
- class Person
- {
-
- };
- struct Animal
- {
-
- };
定义了Person类和Animal类(struct和class定义类有差异,稍后会讲)。
类的构成包含两个部分:数据成员与成员函数
例如上述Person类,可能会有name,age等相关数据,同样有show函数等成员函数。
- class Person
- {
- void show()
- {
- cout << "name:" << name << endl;
- cout << "age:" << age << endl;
- }
- char name[20];
- int age;
- };
直接在类内定义,例如上述Person类中的show()函数。
在类的声明中只给出成员函数的原型,而成员函数的定义写在类的外部。这种成员函数在类外定义的一般形式是:
- 返回值类型 类名::成员函数名(参数表)
- {
- 函数体
- }
例如上述Person类的show()函数显示声明如下:
- class Person
- {
- public:
- void show();
- char name[20];
- int age;
- };
- void Person::show()
- {
- cout << "name:" << name << endl;
- cout << "age:" << age << endl;
- }
- class Person
- {
- public:
- void show();
- char name[20];
- int age;
- }person1, person2;
Person person1;
类中的内容并不是哪里都可以访问的到的,访问是有权限限制的。
public(公有)
public权限下的所有内容,类内类外都可以访问到。
protected(保护)
protected下的内容,只有类内可以访问到。
private(私有)
private下的内容,只有类内可以访问到。
注意:peotected一般在继承中才会用到,这里了解即可。
对上述Person类进行完善,如下:
- class Person
- {
- public:
- void show()
- {
- cout << "name:" << name << endl;
- cout << "age:" << age << endl;
- }
- private:
- char name[20];
- int age;
- };
一般情况下,将数据成员设置为私有,可以防止类外对数据进行修改,将数据保护起来,进行封装,将成员函数设置为公有,作为与外部交互的接口。
注意:class定义类默认权限为private,而struct定义类默认权限为public。这是为了兼容C语言中的结构体。
访问时使用"."操作符对成员进行访问,如果是指针类型,则使用"->"进行访问。
- class Person
- {
- public:
- void show()
- {
- cout << "name:" << name << endl;
- cout << "age:" << age << endl;
- }
- private:
- char name[20];
- int age;
- };
- int main()
- {
- Person person1;
- Person* pperson = &person1;
- //person1.name; 无法访问,name为私有成员
- person1.show(); //可以访问,show()函数为公有成员
- pperson->show(); //指针访问
- return 0;
- }
构造函数是一种特殊的成员函数,主要是对对象进行初始化(不是创建对象)
构造函数有以下特点:
- class Person
- {
- public:
- Person(const char name[] = "lb", int age = 0)
- {
- cout << "Person()" << endl;
- }
- void show()
- {
- cout << "name:" << _name << endl;
- cout << "age:" << _age << endl;
- }
- private:
- char _name[20];
- int _age;
- };
- int main()
- {
- Person person1;
- return 0;
- }
运行结果如下:
析构函数是一类特殊的成员函数,功能与构造函数相反,完成清理工作(不是销毁对象,而是释放资源)
析构函数有以下特点:
- class Person
- {
- public:
- Person(const char name[] = "lb", int age = 0)
- {
- cout << "Person()" << endl;
- }
- ~Person()
- {
- cout << "~Person()" << endl;
- }
- void show()
- {
- cout << "name:" << _name << endl;
- cout << "age:" << _age << endl;
- }
- private:
- char _name[20];
- int _age;
- };
- int main()
- {
- Person person1;
- return 0;
- }
运行结果如下:
拷贝构造函数用于对象的拷贝工作,是一种特殊的构造函数。
拷贝构造函数的特点:
调用拷贝构造函数的情况
- #include
- using namespace std;
- class Person
- {
- public:
- Person()
- {
- cout << "Person()" << endl;
- }
- Person(const Person& person)
- {
- cout << "调用拷贝构造函数" << endl;
- *_name = *person._name;
- _age = person._age;
- }
- ~Person()
- {
- cout << "~Person()" << endl;
- }
- private:
- char _name[20];
- int _age;
- };
- int main()
- {
- Person person1;
- Person person2(person1);
- return 0;
- }
运行结果如下:
this指针保存当前对象的地址,称为自引用指针
- bool isAgeSame(const Person& person)
- {
- return this->_age = person._age;
- }
欢迎关注,码字不易,希望多多点赞、收藏哦!抱拳了。