本文共 2024 字,大约阅读时间需要 6 分钟。
C语言与C++区别:
所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。
对语言本身而言,C是C++的子集。《Effective C++》上说道,C++由四个部分组成: C、Object-Oriented C++、Template C++、 STL,即c语言、面向对象OOP、泛型编程(模板)、STL。
面向对象的三个基本特征是:封装、继承、多态
封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
类的成员可以分为共有成员,私有成员,保护成员。在不考虑继承的情况下,保护成员与私有成员一样,都只能在类内部被访问;而存在继承的情况下,基类的保护成员根据继承的方式,相应地成为了子类的保护成员或私有成员,而基类的私有成员仍为基类的私有成员,子类无法访问基类的私有成员。面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
通过继承创建的新类称为“子类”或“派生类”。 被继承的类称为“基类”、“父类”或“超类”。 继承的过程,就是从一般到特殊的过程。 在某些 OOP 语言中,一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。对基类的继承方式有三种:共有继承、私有继承、保护继承。
(1)共有继承:基类的共有成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有; (2)私有继承:基类的共有成员和保护成员在派生类中成了私有成员,其私有成员仍为基类私有; (3)保护继承:基类的共有成员和保护成员在派生类中成了保护成员,其私有成员仍为基类私有。 ps:“其私有成员仍为基类私有”的意思是,基类的私有成员并没有成为派生类的私有成员,它仍然是基类的私有成员,只有基类的成员函数才能访问它,而不能被派生类的成员函数访问在考虑使用继承时,有一点需要注意,那就是两个类之间的关系应该是“属于”关系。例如,Employee 是一个人,Manager 也是一个人,因此这两个类都可以继承 Person 类。但是 Leg 类却不能继承 Person 类,因为腿并不是一个人。
多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。
封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现接口重用。在C++中, 多态性体现在具有不同功能的函数可以使用同一个函数名,这样就可以通过一个函数名调用不同的函数内容。实现多态,有二种方式,覆盖,重载。
关于虚函数,最常见的用法就是声明基类的指针,利用该指针指向任意一个子类对象,调用相应的虚函数,可以根据指向的子类的不同而实现不同的方法。如果没有使用虚函数的话,即没有利用C++多态性,则利用基类指针调用相应的函数的时候,将总被限制在基类函数本身,而无法调用到子类中被重写过的函数。
比如下面的例子:#includeusing namespace std;class person{public: void sleep() { cout<<"person sleep"< sleep(); ptr->get_up(); ming.sleep (); ming.get_up ();}
运行结果为:
person sleepstudent get upstudent sleepstudent get up
同样,如果将一个子类的指针指向一个基类的对象,也可以调用相应的虚函数。只是没有使用虚函数,则调用子类的函数。如上面定义的类,若main函数为:
person we;student *ptr;ptr = (student *)&we;ptr->sleep();ptr->get_up();
则结果为:
student sleepperson get up