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;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值