C++万物皆对象

前言

首先谢谢您能打开我的文章,希望您能看完,有不对或者可以改进的地方,留言在下面,再次感谢。自己把学习过程的一些方法和笔记,以及针对出现的各种错误解决方法共享在博客里面。不断地在提升自己,觉得这个平台挺好的,可以记录在学习过程中点点滴滴。虽然自己很菜,但我还是会一如既往的分享,努力变的优秀,会一直努力不断地改进。希望对您有帮助。

一 面向过程:

用面向过程的方式解决问题的思路:提出问题,分析问题的处理流程,将大问题分解成小问题,如果小问题比较复杂,那么就继续的分解为更小的问题,然后解决这些一个一个的小问题来解决大问题(调用函数),最后解决所有的问题。这个从问题出发,从上往下的解决过程,一步一步的解决问题,这种开发思路我们称之为面向过程的设计思想,因为他主要是解决问题中的一个个的过程,而且它也比较符合哦我们解决问题的方法(做好这一步,做下一步,直到做完所有)。

1.1优点:

程序结构简单
把大问题分成小问题,然后逐个解决小问题
“先做什么,然后再做什么”

1.2缺点:

在面向过程的时候,数据和操作往往是分离的,这样如果是数据的结构有改变,那么操作数据的函数就不得不重新写,这个代价就比较大,并且数据一般都是不觉有封装性的,很多变量都会暴露出来,这里又可能会被篡改。

二 面向对象:

在这里插入图片描述
万物皆对象
面向对象可以理解为:现实世界是由对象组成的,无论大小。
对象由两个部分组成:
1、描述对象的状态或者属性的数据(变量)
2、描述对象的行为或者功能的方法(函数)

2.1 容易设计和实现

面向对象思想所应用的封装、继承、多态都是符合日常的思维习惯的,所以使用面向对象思想设计的程序结构清晰、更容易设计和实现。  
面向对象思想的继承和多态,强调了程序设计和代码的重用,这在设计新程序的时候,可以最大限度地重用已有的设计和代码,使得程序能够满足新的业务需求并具有较高的质量。

2.2容易扩展

利用面向对象思想的封装、继承和多态,可以设计出“高内聚、低耦合”的程序结构,可以让程序更加灵活、更容易扩展,从而轻松应对软件的扩展需求,降低维护成本。
高内聚,低耦合。通常用来判断一个软件设计的好坏。所谓的高内聚是指一个软件模块是由相关性很强的代码组成,只负责某单一任务,也就是常说的“单一责任原则”。而低耦合指的是在一个完整的程序中,模块与程序之间,尽可能保持相互独立,即每个模块尽可能独立完成特定的子功能,模块与模块之间的接口,尽可能的少而简单。

三 类的构成

在这里插入图片描述
类:封装,继承,多态
类:相同属性和行为的一组对象的统一描述
类中函数:行为
数据成员:属性
人类:男人,女人…(个体)
属性:身高,三围 (对象(个体)抽象出来的共有数据)
专业说法:状态,特征,组成成员
行为: 吃饭,说话…
专业说法:修改属性操作,访问属性,执行命令(动作)
对象:由属性和操作组成的(类的具体化)

3.1类的定义

关键字  class
class  类名
{
public:   //共有属性
protected: //保护属性
private: //私有属性
}

默认的情况都是私有属性
1,成员函数声明 类中函数–成员函数
2,访问成员(除了特殊成员外)—只能通过对象访问
3, 权限问题
(1)public: :公有的,外部可以访问
(2)protected: :通过成员函数访问,外部不能访问
(3)private: :通过成员函数访问 外部不能访问
在这里插入图片描述
4,创建对象
类名 对象名;
类名 *指针名=new 类名
通常做法public:成员函数protected:数据成员
在这里插入图片描述

3.2实例

1,计算圆的面积

#include <iostream>
using namespace std;
class Circle//圆类
{
	int a;//默认私有
public://公有属性:是别人可以在外面直接用的
	int radius;
	float pi = 3.14f;
	void setX(int a)//对外提供的接口
	{
		print();
		x = a;
	}
	int getX()
	{
		return x;
	}
	float CricleS()
	{
		return radius*radius*pi;
	}
protected://保护属性:自己可以用,别人用不了

	int x;
private://私有属性:自己可以用,别人也用不了
	int y;
	void print()
	{
		cout << "欢迎使用我给你的接口" << endl;
	}
};
float fun(int radius, float pi)
{
	return radius*radius*pi;
}

2,对象成员的访问包括:
(1) 指针访问形式
形式一:
对象指针变量名->公有成员
形式二:
(*对象指针变量名).公有成员

int main()
{
	Circle*circle = new Circle;//new一个对象
	circle->radius = 10;
	cout << circle->CricleS() << endl;
	delete circle;
	circle = NULL;
	cout << fun(10, 3.14f) << endl;
		system("pause");
	return 0;
}

(2)圆的访问形式
对象名.数据成员名或 对象名.成员函数名(参数表)
其中“.”叫做对象选择符,简称点运算符。

int main()
{
	Circle circle;//对象实例化
	circle.radius = 10;
	cout << circle.CricleS() << endl;
	circle.radius = 10;
	circle.setX(20);
	cout << circle.radius << endl;
	cout << circle.getX() << endl;
	system("pause");
	return 0;
}

3.3类的实现

1、类:用来封装数据的(数据(变量)+行为(函数))
2、类型定义不占数据内存
3、类定义分为两个部分:类说明和类实现两个部分

class Cstu//类说明
{ 
 int a;//类实现
private:
 void seta(int a);//类实现:定义这个类类型里面的行为,是怎么样的操作  访问类里面的数据叫接口
    void geta(){}; 
};

4,类中成员函数的定义叫类实现
(1)在类中定义
(2)在类外定义

void Cstu::seta(int a)//类外实现类内函数
{
 this->a=a;
}

四 构造析构

4.1构造函数

C++在类的说明中可以包含一个或多个特殊的公有函数成员-构造函数

4.1.1特性:

1、函数名与类名相同
2、没有函数返回值类型,也没有返回值
3、一个新的对象被建立时,该对象的构造函数会自动地被调用,对这个对象进行初始化工作
4、新对象的建立包括两种情况,CA a(对象说明语句);CA *pa = new CA(对象指针指向动态开辟的堆区无名对象);
5、如果一个类说明中没有显式的给出构造,系统将自动地给出一个缺省的(隐式)构造函数,<类名>(){};
6、如果说明中包括多个构造函数,一般会有不同的参数列表和函数体

4.1.2实例

class student
{
	int a;
	student* s;
public:
	//无参构造   默认构造
	student()//构造函数,在对象实例化的时候会调用给对象里面的变量赋值
	{
		cout << "构造函数" << endl;
		a = 100;
	}
	//构造函数可以重载,有参构造,带参构造
	student(int x)
	{
		cout << "带参构造函数" << endl;
		a = x;
	}
};

4.2析构函数

4.2.1特性:

1、函数名与类名相同,在前面加上一个~ ~<类名>() {}
2、没有函数返回值类型,也没有返回值,也没有参数
3、当对象出了他的作用域时,系统会自动调用析构函数
4、析构函数的作用一般是用于给对象里面在堆区申请的内存释放
5、一个类只有一个析构函数
6、如果一个类中没有显示的给出析构,析构将会自动给出一个(隐式)析构函数 ~<类名>() {}

4.2.2实例

	~student()
	{
		cout << "a" << endl;
		delete s;
	}

4.3this指针

C++的保留字,它是一个指针,在任何一个类成员函数的运行过程,这个this指针总是指向调用者对象
*this 表示当前调用者对象
this->成员名((*this).成员名) 表示当前调用者的某个成员
return this; 来返回当前调用者对象的首地址
return *this; 来返回当前调用者对象
类名 * const this;
指向类的对象 ,当对象创建之后,成员函数调用时,this就被说明和创建

五 总结

1、类说明:定义一个类类型,告诉程序这个类型有什么样的数据,有什么样的行为
2、类实现:定义这个类类型里面的行为,类里面的函数就是接口为数据参数的函数,
3、类名大写的C开始,表示一个C++的类; 类说明 :class Cstu{int id;};
4、类的三种访问属性 public(共有) private(私有) protected(保护)
5、类默认是私有属性,只有类中的成员函数才能使用类中的私有数据(private)
6、类中公有的行为及数据可以在程序中被任何函数或语句所调用
7、类中的保护部分是不能在类外被调用的,只有类的子类可以调用
8、定义类时,当未指明成员是哪个属性,默认是私有
9、类的定义时,结尾加;
10,类中通过构造和析构来创建和释放对象
构造:内存从无到有 就可以借助这个过程来完成对象的初始化
析构:内存从有到无 借助这个过程来完成对象的清理(对对象里面所申请的堆区内存进行释放)
11,初始化参数列表Cstu(int x,int y):x(x),y(y){}

猜你喜欢

转载自blog.csdn.net/qq_45893999/article/details/106419556