IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++类与对象 -> 正文阅读

[C++知识库]C++类与对象

写一篇基础文章
讲一下类与对象这个东西,比较深的概念就不讲了。 类顾名思义 也就是某种具有相同特点的东西的集合,比如车类身上含有轮胎,座位,发动机等,这些东西的集合构成了一个车类,在这里我以学生作为开端,后面会讲解到继承,多态等先基础开始。
首先!看图!
在这里插入图片描述
private是完全私有的,只有自己可以访问,派生类和外部都不可以访问
protected是受保护的,只有派生类可以访问,外部不能访问
public权限是最大的,可以内部调用,实例调用等。
这个详细就不说了,可以去参考课本讲解 大概都差不多。
然后我们来定义类!
首先 类的定义 一定是这样的! class 名字{ }; 这样的结构!
后面那个分号别漏了!一般定义类的时候都会带有分号! 但是还有一个重点 那就是名字首字母一定是大写!大写!大写!记住了 一定是大写!

来看代码片段!
思路!:
1.类是包含有成员变量跟成员函数的集合,所以看到了有成员变量跟成员函数
2.有人会说你怎么都是私有成员变量!当然你也可以别的属性,public也行,protect也行,在这里我统一用private!
3.成员函数也分有public,private,protect,看你想实现什么功能而定!在这里我只用public!
4.定义了类下一步想着的一定是初始化!一定是初始化!初始化的操作有一个专业名词!叫构造函数!
5.构造函数有一个特点! 那就是一定跟类同名!一定要记住!!!!
构造函数分为带参数构造跟不带参数构造!,无参构造就算你自己不写!系统也会默认给你来一个无参构造! 当然自己写比较好,带参数构造会比较方便,记住! 带参数构造一定要对应好你的参数是什么类型! 比如 int,float等! 一定要对应!
6.还有一点!析构函数很重要! 析构函数很容易记 就是无参构造函数前面加个波浪线就行了 结构: ~类同名(); 析构函数就是释放内存用的!

#include<iostream>
#include<string>
using namespace std;
class Student
{
private:
	int age;//年龄 成员变量
	int height;//身高  成员变量 
	string sex;//性别  成员变量 
	//如果版本比较低的vs编译软件要包含头文件string
	//2019版的话以及以后的版本都不可不用包含string头文件
	string numb;//学号 成员变量

public:
	Student();//无参构造函数!
	Student(int a, int h, string s, string n);//带参构造函数
	~Student();//析构函数
	void Print_Message();//输出信息! 成员函数
	void StudentShow();//学生的能力!成员函数
};

我为了我的类看起来不那么拖拉!就是看起来简洁点!我选择类外构造!
类外定义的概念讲一下!

  1. 首先一定要带上类名 类名后面接的是作用域!(::)就是这个符号
    也就是 类名::函数名()!
    2.要注意! 如果你的成员函数有类型!比如int,void什么的 一定要带上 在类名的前面!
    假如我有个void类型的成员函数 那么就是这样:void 类名::函数名(),括号里带参还是不带参取决于你前面怎么定义就怎么来!!

我先把这三个有点相同的一起写!

Student::Student()
{
//无参构造他内部做这种操作
	/*age = 0;
	height = 0;
	sex = {};
	numb = {};
	this->age = 0;
	this->height = 0;
	this->numb = {};
	this->sex = {};*/ 
	cout << "我是无参构造" << endl;
}
Student::Student(int a, int h, string s, string n)
{
	cout << "有参构造初始化!" << endl;
	this->age = a;  //你也可以age=a; 一样的  this当然是比较好的 看个人!
	this->height = h;//你也可以height=h;    如果要了解this就看书这里不详讲!
	this->sex = s;   //你也可以sex=s;
	this->numb = n;//你也可以numb=n;
}
Student::~Student()
{
	cout << "调用了析构函数!内存释放!" << endl;
}

来!行为函数!看一下看 也没什么特别的就有啥输出啥唯独是作用域
好好看作用域! 看透了!
返回类型+类名+作用域+函数名()

void Student::StudentShow()
{
	cout << "学生在学习!在写作业!" << endl;//写着玩的看自己想怎么写就怎么写!
}
void Student::Print_Message()
{
	cout << "这个学生的年龄:" << this->age << endl;
	//或者可以直接cout<<age 下面也可以这样!;
	cout << "这个学生的身高:" << this->height << endl;
	cout << "这个学生的性别:" << this->sex << endl;
	cout << "这个学生的学号:" << this->numb << endl;
	cout << "==============================================" << endl;
	//这样看着挺多cout的对吧 你也可以合并一起写但是太长了
	//我就这样写了!方便看吧
}

好 接下来我们来创建对象!
无参的对象:类名+名;
有参的对象:类名+名(把前面定义的参数类型传进去!);

析构函数一定要放到最后 因为是释放内存的 一定要注意!
如果无参构造出来的对象想要赋值!一定要定义set()跟get()函数这里就不说了!

对象一旦创建了,就是默认性的调用构造函数
有几个对象就默认的调用了几次

比如代码中Student s1; 它一旦创建了就会直接s1.Student() 当然里面是不能这么写的 知道一下原理就行!

int main()
{
	Student s1;//这就是创建对象 但这是无参的构造!
	Student s2;//再来一个无参的 
	cout << "==============================================" << endl;
	Student s3(18, 170, "男", "20124026"); //这就是创建对象 就这么简单 但这是有参的!
	Student s4(17, 165, "女", "20124025");//再来一个对象!有参的
	cout << "==============================================" << endl;
	//这个对象要执行的操作!我们用点 点出来
	cout << "学生的行为" << endl;
	s1.StudentShow();//对象做的事!
	s2.StudentShow();
	s3.StudentShow();
	s4.StudentShow();
cout << "==============================================" << endl;
	cout << "输出学生的信息" << endl;
	s1.Print_Message();//输出有乱码是因为输出的是地址,string类似数组
	s2.Print_Message();
	s3.Print_Message();
	s4.Print_Message();
	cout << "==============================================" << endl;
	
	cout << "析构函数" << endl;
	//记住 析构一定放在最后面
	s1.~Student();
	s2.~Student();
	s3.~Student();
	s4.~Student();
	return 0;
}

来 我们直接上主要测试代码

#include<iostream>
#include<string>
using namespace std;
class Student
{
private:
	int age;//年龄
	int height;//身高
	string sex;//性别 //如果版本比较低的vs编译软件要包含头文件string
					  //2019版的话以及以后的版本都不可不用包含string头文件
	string numb;//学号

public:
	Student();//无参构造函数!
	Student(int a, int h, string s, string n);//带参构造函数
	~Student();//析构函数
	void Print_Message();//输出信息!
	void StudentShow();//学生的能力!
};

Student::Student()
{
	
	/*age = 0;
	height = 0;
	sex = {};
	numb = {};
	this->age = 0;
	this->height = 0;
	this->numb = {};
	this->sex = {};*/ 
	cout << "我是无参构造" << endl;
}
Student::Student(int a, int h, string s, string n)
{
	cout << "有参构造初始化!" << endl;
	this->age = a;  //你也可以age=a; 一样的  this当然是比较好的 看个人!
	this->height = h;//你也可以height=h;    如果要了解this就看书这里不详讲!
	this->sex = s;   //你也可以sex=s;
	this->numb = n;//你也可以numb=n;
}
Student::~Student()
{
	cout << "调用了析构函数!内存释放!" << endl;
}
void Student::StudentShow()
{
	cout << "学生在学习!在写作业!" << endl;//写着玩的看自己想怎么写就怎么写!
}
void Student::Print_Message()
{
	cout << "这个学生的年龄:" << this->age << endl;//或者可以直接cout<<age 下面也可以这样!;
	cout << "这个学生的身高:" << this->height << endl;
	cout << "这个学生的性别:" << this->sex << endl;
	cout << "这个学生的学号:" << this->numb << endl;
	cout << "==============================================" << endl;
	//这样看着挺多cout的对吧 你也可以合并一起写但是太长了
	//我就这样写了!方便看吧
}
int main()
{
	Student s1;//这就是创建对象 但这是无参的构造!
	Student s2;//再来一个无参的 
	cout << "==============================================" << endl;
	Student s3(18, 170, "男", "20124026"); //这就是创建对象 就这么简单 但这是有参的!
	Student s4(17, 165, "女", "20124025");//再来一个对象!有参的
	//这个对象要执行的操作!我们用点 点出来
	cout << "==============================================" << endl;
	cout << "学生的行为" << endl;
	s1.StudentShow();//对象做的事!
	s2.StudentShow();
	s3.StudentShow();
	s4.StudentShow();
	cout << "==============================================" << endl;
	cout << "输出学生的信息" << endl;
	s1.Print_Message();
	s2.Print_Message();
	s3.Print_Message();
	s4.Print_Message();
	cout << "==============================================" << endl;
	cout << "析构函数" << endl;
	//记住 析构一定放在最后面
	s1.~Student();
	s2.~Student();
	s3.~Student();
	s4.~Student();
	return 0;
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-14 21:25:37  更:2021-11-14 21:29:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:35:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码