⭐本篇文章为C++学习第4篇,主要了解类和对象基础
⭐本人C++代码的Gitte仓库:yzc的c++学习: 小川c++的学习记录 - Gitee.com 、
⭐我们知道面向对象有三大特性:封装,继承,多态,我们以类为基础进行讲解
目录
一. 类的引入与定义
1.1 类的引入
1.2 类的定义和声明
二. 类的访问限定符及封装⭐
三. 类的作用域和实例化
四. 几个常见易错分析⭐
4.1 C++中类和struct的区别是什么?
4.2 函数,结构体等的声明与定义区别是什么?
4.3 C++面向对象三大特性是什么?C++是如何实现封装的??
一. 类的引入与定义
1.1 类的引入
1. C语言中,我们可以在结构体中定义变量,不能定义函数
2. C++中,我们可以在结构体中定义变量和函数
#include<iostream>
using namespace std;struct Node_c
{int val;struct Node_c* next;
};struct Node_cpp
{int val;Node_cpp* next;//c++可以在类中定义函数Node_cpp CreatNode(){}
};int main()
{return 0;
}
上面结构体的定义,在c++中,我们更喜欢使用class来定义
class Node_cpp
{int val;Node_cpp* next;//c++可以在类中定义函数Node_cpp CreatNode(){}
};
1.2 类的定义和声明
class className
{// 类体:由成员函数和成员变量组成
}; // 一定要注意后面的分号
其中,class为关键字,用于定义类。classname是该类的名字,{}中的是类的主体
类中可以定义两种成员:1. 成员变量 2. 成员函数
类的定义和声明有两种方式:
1. 类成员的声明和变量都放在类体内部。
注意:编译器默认类内部声明定义的函数是内联函数
举例:
//在类内部声明和定义
class person
{int age;string name;string ID;void ShowInfo(){cout << "age:" << age << "name:" << name << "ID:" << ID;}
};
2. 类的声明放在.h文件中,类的定于放在.cpp文件中。
注意:在.cpp文件中定义类的时候要在成员函数前加上 类名::
.h文件
#pragma once//类声明
class person
{int age;string name;string ID;void ShowInfo();
};
.cpp文件
#include<iostream>
#include"blog.h"
using namespace std;//类函数的定义
void person::ShowInfo()
{cout << "age:" << age << "name:" << name << "ID:" << ID;
}int main()
{return 0;
}
我们在日常学习的时候建议使用第一种,比较方便。
在工程中建议使用第二种,更规范。
二. 类的访问限定符及封装⭐
我们知道C++面向对象三大特性中的一个:封装
C++实现封装的方式:用类将对象的属性和方法结合在一块,完善对象,再使用访问权限选择性将接口提供给外部用户使用
访问限定符有三种:
public(公有) private(私有) protected(保护)
说明:
1. public修饰的成员外部可以直接访问
2. private和protected修饰的成员外部无法直接访问(这两种限定符类似)
3. 访问权限从一个限定符开始,到另一个限定符为止
4. 如果后面没有访问限定符,作用域到}即类结束
5. class默认访问权限是private,struct默认访问权限就是public
6. 一般情况下,成员变量都是比较隐私的,都会用私有或者保护修饰
举例:
//访问限定符
class Student
{
public:
//公有区域void ShowInfo(){cout << _name << endl;cout << _age << endl;cout << _id << endl;}int _GetAge(){return _age;}
//公有区域
private:
//私有区域char* _name;int _age;int _id;
//私有区域
};
三. 类的作用域和实例化
3.1 类的作用域
类定义了新作用域:类中所有成员都在类的作用域中,如果在类外定义类成员需要使用
类名+:: 进行定义
3.2 类的实例化
类是用于描述的对象的,我们定义的类没有分配实际的内存空间(只是一段代码)。
当使用类创建对象的时候,才会占用实际物理空间,存储成员变量
且一个类可以实例化多个对象
int a;
Student st;
可以类比int和Student类,a是整形变量,st是学生变量
只有a和st占用物理空间,int和Student不会占用
举例:
#include<iostream>
using namespace std;//访问限定符
class Student
{
public:void ShowInfo(){cout << "name:" << _name << " " << " age:" << _age << " id:" << _id << endl;}const char* _name;int _age;int _id;
};int main()
{Student st1; //实例化一个对象st1st1._age = 18;st1._name = "张三";st1._id = 1;st1.ShowInfo();return 0;
}
运行结果:
四. 几个常见易错分析⭐
4.1 C++中类和struct的区别是什么?
C++兼容C语言,所以在C++中可以使用struct去定义结构体使用,C++也能使用struct去定义类
C++使用struct定义类和class定义的类基本一致,唯一区别是struct定义类,成员默认是公有的。使用class定义类,成员默认是私有的
4.2 函数,结构体等的声明与定义区别是什么?
声明是一种承诺,表示程序中有该函数,结构体。我们可以通过声明的名字快速了解该函数,结构体等的作用
定义是给出函数,结构体等如何实现这个功能或者内容。我们可以通过定义了解函数,结构体的具体内容
4.3 C++面向对象三大特性是什么?C++是如何实现封装的??
封装,继承,多态
封装:将数据和对数据的操作的方法进行结合,隐藏对象的属性和细节,用户仅通过对外公开的接口和对象交互。方便用户的同时也保护数据
C++实现封装,可以通过类将数据和对数据操作的方法进行结合,通过private,public等访问权限来隐藏内部实现细节,控制哪些方法供外部使用