认识C++(C++学习笔记 4)

目前主要参考的书是《C++ Primer》第三版
学校上课用的是《C++面向对象程序设计教程》第三版

一、 C++的起源

C语言的局限性:

  1. 类型检查机制相对较弱,使得程序中的一些错误不能再编译阶段由编译器检查出来
  2. 几乎没有支持代码重用的语言结构
  3. C语言是面向过程1的编程语言,不能满足运用面向对象2方法开发软件的需要,不适合大型程序,当程序的规模到达一定的程度时,程序员就很难控制程序的复杂性。

C++就是为了解决上述问题而设计的。
美国AT&T贝尔实验室的本贾尼·斯特劳斯特卢普(Bjarne Stroustrup)博士在20世纪80年代初期发明并实现了C++(最初这种语言被称作“C with Classes”)。

二、C++的特点

主要表现在两个方面:

  1. 全面兼容C,并对C的功能作了不少的扩充
  2. 增加了面向对象的机制

C++语言最有意义的方面是支持面向对象的特征,然而,由于C++与C语言保持兼容,使得C++不是一个纯正的面向对象的语言,C++既可用于面向过程的结构化程序设计,也可用于面向对象的程序设计。

三、面向对象程序设计

(1)什么是面向对象程序设计?

程序=对象+消息
面向对象程序的基本元素是对象
面向对象的主要结构特点是:
  1)程序一般由类的定义和类的使用两部分构成;
  2)程序中的一切操作都是通过向对象发送消息来实现的,对象接收到消息后,启动有关方法完成相应的操作。

(2)什么是对象?什么是类?对象与类的关系是什么?

  对象一般可以表示为:属性+行为,一个对象往往是由一组属性和一组行为构成的。
  类是对具有相同的属性和行为的对象操作的一类对象的描述。
  类和对象之间的关系是抽象与具体的关系。类是多个对象进行综合抽象的结果,一个对象是类的一个实例。

(3)几种典型的面向对象程序设计语言?

  1)Smalltalk语言
  2)Simula语言
  3)C++语言
  4)Java语言
  5)C#语言

(4)面向对象程序设计的4个基本特征?

  1)抽象
  抽象是通过特定的实例(对象)抽取共同性质后形成概念的过程,是将有关事务的共性归纳,集中的过程。例如,在设计一个成绩管理程序的过程中,只关心学生的姓名,学号,成绩等,而对他的身高,体重等信息就可以忽略。而在学生健康信息管理系统中,身高,体重等信息必须抽象出来,而成绩可以忽略。

  2)封装
  封装是指把某个事物包围起来,使外界不知道该事物的具体内容,在面向对象程序设计中,封装是指把数据和实现操作的代码集中起来放在对象内部,并尽可能隐蔽对象的内部细节。例如,在使用洗衣机时,人们只需要按下指定的按钮就可以让洗衣机完成相应的工作,而无法(也没必要)操作洗衣机的内部电路和机械控制部件,因为它们被装在洗衣机里面,这对用户来说是隐蔽的,不可见的。

  3)继承
  继承表达的是类之间的相关关系,这种关系使得某类对象可以继承另外一类对象的特征和能力。例如,现实生活中,我们继承了我们父母的一些特征,如种族,血型,眼睛的颜色等,父母是我们所具有的属性的基础。
  假设有两个类A和B,若类B继承类A,则类B包含了类A的特征(包含数据和操作),同时也可以加入自己所特有的新特性,这时称被继承类A为基类或父类,而继承类B为A的派生类或子类。同时还可以说,类B是从类A中派生出来的。

  4)多态
  多态性指不同的对象收到相同的消息时执行不同的操作。可以参考例子:
https://www.cnblogs.com/jaffee-L/p/9717253.html

四、C++程序格式

(1)初步认识C++程序

例子: 计算两个整数的和

#include
using namespace std;

int main(){
        int x,y,sum;
        cout<<"Please input two integers:"<<'\n';
        cin>>x;
        cin>>y;
        sum=x+y;
        cout<<"x+y="<<sum<<endl;
        return 0;
}

1、标准C++要求在主函数前面写上返回值类型为int,若一个函数没有指出返回值类型,C++默认该函数的返回值类型是int型。
2、程序的"#include“是编译预处理命令,用来指示编译器在对程序进行预处理时,将文件iostream的代码嵌入到程序中该指令所在的地方。
3、使用”#include“时必须加上"using namespace std”,否则编译时将出错。

(2)C++程序的结构特性

一个面向对象的C++程序一般是由类的声明和类的使用两大部分构成。
例子: 带类的C++程序

#include
using namespace std;

class Student{
private:
        int num;
        int score;
public:
        void setdata(){
                cout<<"num and score:";
                cin>>num;
                cin>>score;
        }
        void display(){
                cout<<"num="<<num<<endl;
                cout<<"score="<<score<<endl;
        }
};
Student stud1,stud2;
int main(){
        stud1.setdata();
        stud2.setdata();
        cout<<"student1:"<<endl;
        stud1.display();
        cout<<"student2:"<<endl;
        stud2.display();
        return 0;
}

通过声明类,构建了程序所要完成的功能,体现了面向对象程序设计的思想。在该程序中首先声明了类Student,然后再主函数中创建了类Student的对象stud1和stud2,通过向对象发送消息,调用成员函数setdata( )和display( ),完成所需要的操作。

(3)C++程序的编辑、编译、连接和运行

开发C++程序c++程序的开发通常要经过编辑、编译、连接、运行调试这几个步骤:编辑是将源程序输入到计算机中,生成后缀为.cpp的磁盘文件。编译是将程序的源代码转换为机器语言代码。但编译后的程序还不能有计算机执行,还需要连接。连接是将目标文件以及库中的某些文件连在一起,生成一个后缀为.exe的可执行文件。最后,还要对程序进行运行、调试。( 这段话来自:https://blog.csdn.net/genian123/article/details/75333173 )


  1. 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。 ↩︎

  2. 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。 ↩︎

你可能感兴趣的:(c++)