栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > C/C++/C#

C++类与对象

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++类与对象

文章目录
  • 前言
  • 一、类与对象初识
    • 1、什么是面向过程与面向对象,以及它们的优缺点分别是什么
      • 面向过程
      • 面向对象
      • 优缺点
    • 2、类与对象
      • 对象
      • I、面向对象的三大特征
        • 面向对象三大特性
          • 抽象(一般忽略这个)
          • 封装
          • 继承
          • 多态
      • II、类的申明与创建
        • 类的声名与创建:
          • 数据初始化的方式:
  • 二、类中函数指针
  • 总结


前言 一、类与对象初识 1、什么是面向过程与面向对象,以及它们的优缺点分别是什么 面向过程

步骤化:是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

面向对象

行为化:面向对象是把整个需求按照特点、功能划分,将这些存在共性的部分封装成对象,创建了对象不是为了完成某一个步骤,而是描述某个事物在解决问题的步骤中的行为

优缺点

面向过程:

  • 优点:性能上它是优于面向对象的,因为类在调用的时候需要实例化,开销过大。
  • 缺点:不易维护、复用、扩展

面向对象:

  • 优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出__低耦合__的系统,使系统更加灵活、更加易于维护
  • 缺点:性能比面向过程低
2、类与对象 类

即类别:类是具有相似属性和行为的一组实例集合

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RggEuxvD-1660054840939)(类和对象初识.assets/1657191123507.png)]

  • 属性 ---->数据成员: int, float, char,string ,double ,struct ,class

  • 行为 ---->成员函数: 类中的函数

对象
  • 对象,即类的实例:现实世界是由各种各样的事物组成,包括真实的事物和抽象的事物。例如,人、动物、汽车(真实的事物)和程序、直线(抽象的事物)等。
  • 每一类事物都有自己特定的属性(如大小、形状、重量等)和行为(如生长、行走、转弯、运算等),人们通过研究事物的属性和行为而认识事物。在计算机科学中将这些现实世界中的事物称之为对象

对象: 类具体化(实例化)

例子: 女朋友类

属性:姓名 年龄 身份证 三围… 未初始化的变量

行为: 购物,睡觉 ,吃饭

对象:姓名: 小芳 年龄18 身份证:xxx 三围 x,y,z 变量被初始化

I、面向对象的三大特征 面向对象三大特性 抽象(一般忽略这个)

抽象是人类认识问题的最基本手段之一。抽象是指对具体问题(对象)进行概括,抽出一类对象的公共属性和行为并加以描述的过程。类是对象的抽象,对象是类的特例。

封装

封装是把每个对象的数据(属性)和操作(行为)包装在一个类中。一旦定义了对象的属性和行为,则必须决定哪些属性和行为只用于表示内部状态,哪些属性和行为在外部是可见的。 封装保证了模块具有较好的独立性,使得程序维护修改较为容易。

继承

继承是指一个新类可以从现有的类派生而来。新类继承了现有类的特性,包括一些属性和行为,并且可以修改或增加新的属性和行为,使之适合具体的需要。继承为了重用父类代码,同时为实现多态性作准备。

多态

多态性是指类中具有相似功能的同名函数,并根据不同类的对象对同一消息产生的不同行为。

II、类的申明与创建
  • 类的定义由关键字class,其后为用户定义的类名,花括号括起来的部分称为类体(与结构体类似)。结构体就是一个类,但又与类有点不同(默认权限的不同等)
  • 权限限定符
  • private:私有属性,数据成员一般定义为private属性;
    pubilc: 公有属性,是类的外部接口,成员函数一般定义为public属性;
  • protected:保护属性,类中使用
类的声名与创建:
//-----1申明与创建-------
//权限限定词没有个数限制
#include 
#include 
using namespace std;
class GirlFriend 
{
	//类中是没有权限可言
	//权限只是针对类外对象来说的
	//类中没有权限限定的默认是私有属性
	void  printData() 
	{
		cout << "printData" << endl;
	}
public:				//公有属性
	int age;		//数据成员
	void print()	//成员函数
	{
		cout << "行为" << endl;
	}
private:
	string num;		//数据成员
protected:
	int money;		//数据成员
public:
public:
};
//保护和私有属性目前没有区别,继承中在意
//掌握的内容:
//1.学会创建
//2.学会调用
//3.权限限定

//别致创建法
//NO.1 类成员先声明后定义
class MM 
{
public:
	void printMM();
};

void MM::printMM() 
{
	cout << "先声明后实现" << endl;
}
//NO.2 在命名空间类,可以先声明后实现
namespace  Boy
{
	class CoolMan;
}
class Boy::CoolMan 
{
public:
	void printCoolMan();
};
void Boy::CoolMan::printCoolMan() 
{
	cout << "剥洋葱" << endl;
}
//No.3 类中类
//学会访问方式
//类中类依然受权限限定
class A
{
public:
	void printA() 
	{
		cout << "A" << endl;
	}
protected:

public:
	class B 
	{
	public:
		void printB() 
		{
			cout << "B" << endl;
		}
	};
};
void testClass() 
{
	A::B  bObject;
	bObject.printB();
	A aobject;
	aobject.printA();
}
----2、主函数
int main() 
{
	GirlFriend  girl;					//创建一个对象
	GirlFriend* p = new GirlFriend;		//new一个对象
	//访问数据: 普通对象用.方式访问
	//指针: ->方式访问
	cout << girl.age << endl;
	cout << p->age << endl;
	cout << (*p).age << endl;			//*指针等效变量
	//错误 类外只能访问public下面的数据,其他的数据不能访问
	//cout << girl.num << endl;
	//cout << p->money << endl;
	//p->printData();					//私有属性
	delete p;
	p = nullptr;
	testClass();

	
	return 0;
}

####类中数据的初始化:

数据初始化的方式:
	1、定义成员变量的时候直接初始化
	2、传参的方式
	3、通过共有接口
#include 
#include 
using namespace std;
class MM
{
public:
	void printMM()   //mm.printMM() : mm.name mm.age
	{
		cout << name << "t" << age << endl;
	}
	//No.2 传参的方式
	void initMM(string xName, int xAge) 
	{
		MM::name = xName;
		MM::age = xAge;
	}
	//No.3 通过提供共有接口,类做初始化
	string& getName() { return name; }
	int& getAge() { return age; }
private:
	//No.1 直接初始化
	string name="默认";
	int age=0;
};
int main() 
{
	//C++数据包含函数一种数据
	MM mm;
	mm.printMM();
	mm.initMM("小白", 38);
	mm.printMM();
	mm.getName() = "星";
	mm.getAge() = 18;
	mm.printMM();


	return 0;
}
二、类中函数指针

类中函数指针的定义:函数指针返回类型(*函数指针名A)()=&类中存在的函数B;-------为B函数创建一个函数指针A
函数指针的使用:使用对象的方式调用
注意:要加类名限定,A、B军要加类名限定

#include 
using namespace std;
class MM 
{
public:
	void printMM() 
	{
		cout << "MM中的函数" << endl;
	}
private:
};
int main() 
{
	//学会创建一个类中函数指针
	void(MM::*Func)() = &MM::printMM;
	auto p = &MM::printMM;		//类中成员函数指针一定更要用类名限定
	//怎么调用
	MM mm;		//有对象了
	mm.printMM();
	//mm.p();
	//mm.(*p)();
	(mm.*p)();
	(mm.*Func)();
	//(mm->p)();
	MM* pMM = new MM;
	(pMM->*p)();
	return 0;
}
总结

上面我们一起学习了类与对象的区别、如何创建类和对象以及函数指针的使用。
重点掌握类的创建于函数指针的创建与使用。

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1037727.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号