浅析何谓“面向对象的程序设计”

写在最前面呀~~~
这个专栏是作者在自学C++过程中的一些笔记,包括了学习资料中课件知识和自己的一些总结。
关于学习资料,是中国大学MOOC上,北京大学的《程序设计与算法(三)C++面向对象程序设计》,主讲老师郭炜帅气又潇洒,推荐大家去看看

1. 程序设计的分类

关于程序设计,分为两类,面向对象的程序设计与结构化程序设计。

直接来说,在结构化程序设计中,程序=数据结构+算法

程序由全局变量以及众多相互调用的函数组成,各个函数之间可以互相调用,各个函数也可以使用各个(全局)变量,如下图所示。

这种编程方法,在程序较为短小时还好,当工程规模愈发庞大,就会变得难以理解,错综复杂的关系也会使得程序扩充与重用性差、难以查错、没有“封装”和“隐藏”的概念;
在这里插入图片描述
在面向对象的程序设计中,程序=类+类+…类,换言之,设计程序的过程,其实就是设计各个类的过程。

在这里插入图片描述


关于面向对象的程序设计方法,类是什么呢?换个问题,类的组成是什么呢?

分两部分,数据结构和函数:
(1)我们可以用多个变量描述一个事物的属性,于是将客观事物或问题的共同属性归纳出来,可以形成一个数据结构
(2)将这一类事物或者问题的行为归纳出来,形成可以操作(1)中数据结构的函数(即抽象)

类就是通过特定的语法形式,将上述数据结构与函数捆绑在一起而形成的。也说我们“封装”这些数据结构与算法形成了一个类。


2. 面向对象程序设计的特点

抽象
封装
继承
多态

3. C++中的“类”

编写实例

//C++中类的编写和使用实例:计算长方形面积和体积
class CRectangle
{
	public:
		int w, h;
		int Area(){
			return w*h;
		}
		int Perimeter(){
			return 2*(w + h);
		}
		void Init(int w_, int h_){
			w = w_;
			h = h_;
		}
};

//类的使用
int main()
{
	int w, h;
	CRectangle r;//具化出一个对象r
	cin >> w >>h;
	r.Init(w, h);
	cout << r.Area() << endl <<
			r.Perimeter();
	return 0;	
}

关于类的用法

(1)用法1:对象名.成员名

CRectangle r1, r2;
r1.w = 5;
r2.Init(5, 4);

(2)指针->成员名

CRectangle r1, r2;
CRectangle * p1 = & r1;
CRectangle * p2 = & r2;
p1->w =5;
p2->Init(5,4);//Init作用在p2指向的对象上,即r2的地址

(3)引用名.成员名

CRectangle r2;
CRectangle & rr = r2;
rr.w = 5;
rr.Init(5,4)//通过引用的值改变对象的值

类成员的可访问范围

在类的定义过程中,常常使用不同的访问范围关键字来说明类成员可被访问的范围。
(1)private: 私有成员,只能在成员函数内访问
(2)public:公有成员,可以在任何地方访问
(3)protected:保护成员,之后会提及

换言之,在类的成员函数的内部,能够访问当前对象的全部属性与函数,以及同类的其他对象的全部属性与函数;在类的成员函数之外的地方,只能够访问该类对象的公有成员。


每个关键字出现的次数与次序均没有限制,如果某个成员前缺少访问范围关键字,则缺省地认为是私有成员,例如:

class Man{
	int nAge; //默认为私有成员
	char szName[20]; //默认为私有成员
	public :
		void SetName(char * szName){
			strcpy(Man::szName, szName);
		}
};

关于类内函数的定义,可以在类定义时仅仅对函数头进行声明,而不对函数体进行定义,而是在类外进行补充定义,例如:

class CEmployee{
	private:
		char szName[30];// name
	public :
		int salary;
		void setName(char * name); //仅进行声明而不定义
		void getNme(char * name);
		void averageSalary(CEmployee e1, CEmployee e2);
};

// 进行类内成员函数的定义
void CEmployee::setName(char * name){
	strcpy(szName, name);
}
void CEmployee::getName( char * name){
	strcpy(name,szName);
}
void CEmployee::averageSalary(CEmployee e1,CEmployee e2){
	cout << e1.szName;
	salary = (e1.salary + e2.salary) / 2;
}

对于设置私有成员的机制,即”隐藏“的目的:强制对某些成员变量的访问一定要通过成员函数进行,则之后对成员变量的属性做出修改时,只需要修改成员函数即可,而不是修改所有直接访问到成员变量的语句。

类内成员函数的重载与参数缺省

成员函数可以进行重载与参数缺省,只要能够避免函数重载时出现二义性即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖虎干嘛了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值