C++基础学习笔记----第八课(类的封装)

本节主要讲类的类的组合的基本概念、类的封装的基本概念以及类成员作用域的问题,最后实现了一个计算器的运算类。

类的组合

有很多类还可以下分小类,一个大类的由若干个小类组成,大类产生小类称为类的继承。

类的封装

类的封装主要分为两个方面:①类的实现细节②类的使用方式



当使用类时,不需要关心类的具体实现细节,当创建一个类时,才要考虑其内部的实现细节。

基本概念

类的属性:主要通过类中的成员变量来表示的。并不是每一个类的属性都是对外公开的。然后一些类的属性却需要对外公开,这样就需要在类的表示法中定义类的属性和级别。

类的封装:C++中用于表示类的属性的变量成为成员变量,用于表示类的行为的函数称为成员函数。

访问级别:可以给类的属性和类的成员函数定义访问级别。①public:成员变量和成员函数可以在类的内部和外部访问和调用。②private:成员变量和成员函数只能在类的内部访问和调用。

基本例程如下:

#include <stdio.h>

struct Computer
{
	bool Cpu;
	bool Neicun;
	int a();
};

struct Dell:Computer
{
public:
	bool hp;
	char Japan;
private:
	int b()
	{
		printf ("Thist is Dell\n");
	}
};

struct Lenovo:Computer
{
	bool lenovo;
	char China;
	int c()
	{
		printf ("L\n");
		return 0;
	}
};



int main()
{
	Dell dell;
	dell.hp = 1;
	dell.Japan = 'j';
	//dell.b(); //无法访问,因为b()成员函数的属性是private

	Lenovo lenovo;
	lenovo.lenovo = 1;
	lenovo.c();

	return 0;
}
子类中的类成员函数可以访问父类中的类成员函数,如果子类的成员属性是public,同时定义了类的对象,同样可以通过对象来访问。


#include <stdio.h>

struct Computer
{
	bool Cpu;
	bool Neicun;
	int a()
	{
		printf ("Computer\n");
		return 0;
	}
};

struct Dell:Computer
{
public:
	bool hp;
	char Japan;
	int f()
	{
		a();
		return 0;
	}
private:
	int b()
	{
		printf ("Thist is Dell\n");
	}
};

struct Lenovo:Computer
{
	bool lenovo;
	char China;
	int c()
	{
		printf ("L\n");
		a();
		return 0;
	}
};



int main()
{
	Dell dell;
	dell.hp = 1;
	dell.Japan = 'j';
	//dell.b(); //无法访问,因为b()成员函数的属性是private
	dell.f();

	Lenovo lenovo;
	lenovo.lenovo = 1;
	lenovo.c();

	return 0;
}
通过上面的程序可以看出,对象访问类中的成员主要由private和public属性来进行控制,同时不同的类之间的类成员的访问也是依靠这两个属性进行控制的,但是如果同一类之间的成员访问时没有限制的。

类成员的作用域

类成员的作用域都只在类的内部,外部无法直接访问,外部可以通过建立类的对象来访问类的成员(也仅仅局限于public属性的成员)。一个类中的成员函数可以直接访问成员变量并调用这个类中的其他成员函数。

类的外部可以通过类变量访问public成员,类成员的作用域与访问级别是没有关系的。

#include <stdio.h>

int i = 1;
struct A
{
private:
	int i;
public:
	int j;
	int a()
	{
		i = 3;
		
		return i;
	}
};

int main()
{
	int i = 2;
	
	printf ("i = %d\n",i);
	printf ("::i = %d\n",::i);

	A a;
	printf ("a.a() = %d\n", a.a());
	
	//a.i = 4;
	//printf ("a.i = %d\n", a.i);

	return 0;
}
类成员的作用域只在类的内部,外部无法直接访问,如果外界向访问,需要通过类的对象来进行访问。这里的全局变量i被main函数中的i覆盖,::i是默认的命名空间,所以是全局的,而在类A中的函数a()属性石public,所以我们可以在main函数中进行访问,而a()使用的变量是类的内部成员变量,所以可以使用,最后的打印结果入下图所示:


struct和class

class是用于定义类的又一个关键字,它的用法和class是完全相同的。struct定义类时候类的默认属性是public,class定义类时类的默认属性石private。需要注意的是:这两个属性都是默认的属性,我们仍然可以使用public和private这两个关键字来进行约束。

#include <stdio.h>

int i = 1;
struct A
{
private:
	int i;
public:
	int j;
	int a()
	{
		i = 3;
		
		return i;
	}
};

class B
{
private:
	int a;
public:
	int i()
	{
		printf ("hello world\n");
		return 0;
	}
};

int main()
{
	A a;
	//a.i;这里的i无法访问,因为属性石private

	B b;
	b.i(); //这里的成员函数i()可以被访问,因为它的属性是public

	return 1;
}

课后练习

要求:


 没有进行类封装的程序如下:

#include <stdio.h>

struct Operator
{
private:
	double ob;
	double oc;
	char oa;

public:
	bool setOperator(char a)
	{
		bool ret = false;

		if ((a == '+') || (a == '-') || (a == '*') || (a == '/'))
		{
			oa = a;
			ret = true;
			return ret;
		}
		else
		{
			ret = false;
			return ret;
		}
	}
	void setPatameter(double b, double c)
	{
		ob = b;
		oc = c;
	}
	
	bool result(double& d)
	{
		bool ret = true;
		switch (oa)
		{
			case '/':
				{
					if ((oc > -0.000001) && (oc < 0.0000001))
					{
						ret = false;
					}
					else
					{
						d = ob / oc;
					}
					break;
				}
				
			case '+':
				{
					d = ob + oc;
					break;
				}
				
			case '*':
				{
					d = ob * oc;

					break;
				}
				
			case '-':
				{
					d = ob - oc;
					break;
				}
			default:
					ret = false;
				break;
		}
		return ret;
	}	
};

int main()
{
	double aa = 0;

	Operator o;
	o.setOperator('/');
	o.setPatameter(2,0);
	o.result(aa);

	printf ("%f\n",aa);

	return 1;
}
进行类封装之后的程序:

main.cpp

#include <stdio.h>
#include "o.h"

int main()
{
	double aa = 0;

	Operator o;
	o.setOperator('/');
	o.setPatameter(2,0);
	o.result(aa);

	printf ("%f\n",aa);

	return 1;
}
o.cpp

#include "o.h"

bool Operator::setOperator(char a) //这里需要指明setOperator是哪个类的函数,要不然setOperator将会成为全局函数
								   //这里的表示方法是使用::
{
	bool ret = false;

	if ((a == '+') || (a == '-') || (a == '*') || (a == '/'))
	{
		oa = a;
		ret = true;
		return ret;
	}
	else
	{
		ret = false;
		return ret;
	}
}
void Operator::setPatameter(double b, double c)
{
	ob = b;
	oc = c;
}

bool Operator::result(double& d) 
{
	bool ret = true;
	switch (oa)
	{
		case '/':
			{
				if ((oc > -0.000001) && (oc < 0.0000001))
				{
					ret = false;
				}
				else
				{
					d = ob / oc;
				}
				break;
			}
			
		case '+':
			{
				d = ob + oc;
				break;
			}
			
		case '*':
			{
				d = ob * oc;
				break;
			}
			
		case '-':
			{
				d = ob - oc;
				break;
			}
		default:
				ret = false;
			break;
	}
	return ret;
}	
o.h

#ifndef _O_H
#define _O_H

struct Operator
{
private:
	double ob;
	double oc;
	char oa;

public:
	bool setOperator(char a);
	void setPatameter(double b, double c);
	bool result(double& d);
	
};
#endif

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《Visual C++权威剖析--MFC的原理、机制与开发实例》是一本介绍MFC(Microsoft Foundation Classes)的原理、机制以及开发实例的权威性书籍。MFC是微软公司用于开发Windows应用程序的一套库,是在C++基础上实现的,为开发者提供了一些常用的和函数,简化了Windows应用程序的开发过程。 这本书首先对MFC的基本原理进行了详细的介绍。它解释了MFC的框架结构,包括应用程序对象、窗口和消息映射等重要组成部分。同时,它还深入讲解了MFC的事件处理机制、资源管理和界面设计等方面的内容,帮助读者全面理解MFC的内部机制。 除了原理的介绍,这本书还给出了一些实际的开发实例。通过这些实例,读者可以学习如何使用MFC来创建一个完整的Windows应用程序。这些实例包括了常见的功能,例如窗口创建、菜单设计、对话框布局以及文件操作等。通过实际的案例,读者可以加深对MFC的理解,并且在实践中提高自己的开发能力。 总体来说,《Visual C++权威剖析--MFC的原理、机制与开发实例》是一本权威且实用的书籍,适合有一定C++基础并且对Windows应用程序开发感兴趣的读者。通过学习这本书,读者可以更好地掌握MFC的原理和使用技巧,提高自己的软件开发能力。 ### 回答2: 《Visual C++权威剖析--MFC的原理、机制与开发实例》是一本介绍MFC(Microsoft Foundation Classes)的书籍。MFC 是微软公司推出的一个非常重要的C++框架,用于在Windows操作系统上开发图形用户界面应用程序。 这本书首先解释了MFC的基本原理和机制。MFC建立在Windows API之上,它提供了一套面向对象的库,用于简化Windows GUI应用程序的开发。MFC封装了很多常用的控件和功能,并且提供了很多易于使用的和函数来处理用户输入、显示输出、消息处理、资源管理等。 书中还介绍了如何使用MFC开发实例。通过这些实例,读者可以学习如何创建一个基本的MFC应用程序,并了解如何利用界面设计器来设计用户界面。书中还提供了一些示例代码,展示了如何处理按钮点击事件、菜单点击事件、对话框等。通过这些实例,读者可以学习到MFC的具体用法和开发技巧。 此外,书中还深入探讨了MFC的高级特性和扩展机制。例如,它介绍了如何使用ActiveX 控件、数据库编程、多线程编程等。这些内容可以帮助读者更加深入地了解MFC并提高开发能力。 总的来说,《Visual C++权威剖析--MFC的原理、机制与开发实例》是一本详细介绍MFC的权威书籍。它适合有一定C++基础,想要学习MFC开发的读者。通过阅读这本书,读者可以系统地学习MFC的原理、机制和开发实例,从而提高Windows GUI应用程序的开发能力。 ### 回答3: 《Visual C++权威剖析--MFC的原理、机制与开发实例》是一本面向Visual C++开发者的权威指南,全面介绍MFC(Microsoft Foundation Class)的原理、机制和开发实例。MFC是微软提供的一组C++库,用于开发Windows应用程序。 该书首先介绍了MFC的发展历史以及其与Windows操作系统的关系。接着详细解析了MFC的体系结构和设计原理,包括C++面向对象编程、事件和消息处理、窗口和控件等基本概念。通过深入理解MFC的原理和机制,读者可以更加高效地利用MFC进行应用程序开发。 本书还提供了大量的开发实例,涵盖了MFC的各个方面,包括界面设计、数据处理、线程管理等。每个实例都提供了详细的代码和演示步骤,读者可以根据实例来学习并实践MFC的开发技术。通过实例的学习,读者可以了解MFC在实际开发中的应用场景和解决问题的方法。 此外,该书还介绍了一些高级的MFC主题,如自定义控件、打印和预览、国际化等。这些主题涉及到一些常见但较为复杂的开发问题,通过学习这些内容可以进一步提升开发者的技术水平。 总之,《Visual C++权威剖析--MFC的原理、机制与开发实例》是一本全面系统的MFC教程,适合有一定C++编程基础的开发者阅读。通过学习这本书,读者可以深入了解并熟练掌握MFC的原理、机制和开发技术,提高自己在Windows应用程序开发中的能力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值