泰山学院信息科学技术系教案
计算机科学与应用 教研室  教师姓名:  王  军        教案号: 1
课程名称
C++程序设计
授课专业
和班级
06级计算机科学技术
授课章节
与题目
第一章C++初步知识
C++对C的非面向对象扩充
2
教学
目的
1、了解学习C++的必要性;
2、了解C++的特点;
3、掌握C++对C的非面向对象方面的若干扩充。
教学
方法
讲授与演示相结合、讨论、对比
教学重点:掌握C++语言与C语言在语法上的不同之处。
教学难点:C++的I/O、函数重载、函数模板。
作业
P33 1、5、10
教学
小结
教学过程与内容
教学后记
一、引入新课
    C语言是一种非常优秀的语言,我们为什么还要学习C++呢?
二、讲授新课
1.1 从C到C++(引言)
C++是由C发展而来的,与C兼容。用C语言写的程序基本上可以不加修改地用于C++。从C++的名字可以看出它是C的超集。C++既可用于面向过程的结构化程序设计,又可用于面向对象的程序设计,是一种功能强大的混合型的程序设计语言。
C++对C的“增强”,表现在两个方面:
(1) 在原来面向过程的机制基础上,对C语言的功能做了不少扩充。
(2) 增加了面向对象的机制。
注意:(1)面向对象程序设计,是针对开发较大规模的程序而提出来的,目的是提高软件开发的效率。(2)不要把面向对象和面向过程对立起来,面向对象和面向过程不是矛盾的,而是各有用途、互为补充的。
1.2 最简单的C++程序
例1.1 输出一行字符: “This is a C++ program.”。
#include <iostream>      //包含头文件iostream
using namespace std;      //使用命名空间std
int main( )
{ cout<<″This is a C++ program.″;
return 0;}
  #include <iostream>是一个“包含命令”,它的作用是将文件iostream的内容包含到该命令所在的程序文件中,代替该命令行。第2行“using namespace std; ” 的意思是“使用命名空间std”。例1.2 求a和b两个数之和。
// 求两数之和        (本行是注释行)
#include <iostream>      //预处理命令
using namespace std;    //使用命名空间std
int main( )                      //主函数首部
{                                //函数体开始
    int a,b,sum;                    //定义变量
    cin>>a>>b;                      //输入语句
    sum=a+b;                        //赋值语句
    cout<<″a+b=″<<sum<<endl;      //输出语句
    return 0;  //如程序正常结束,向操作系统返回一个零值
}              //函数结束
输入 123  456↙
输出 a+b=579
包含类(class)和对象(object)的C++程序。
例1.4 包含类的C++程序。
#include <iostream>
using namespace std;
class Student          // 声明一个类,类名为Student
{  private:            // 以下为类中的私有部分
int num;            // 私有变量num
int score;            // 私有变量score
public:                // 以下为类中的公用部分
void setdata( )        // 定义公用函数setdata
{ cin>>num;            // 输入num的值
  cin>>score;          // 输入score的值
}
void display( )      // 定义公用函数display        {  cout<<″num=″<<num<<endl;      // 输出num的值
cout<<″score=″<<score<<endl; };  //输出score的值
};                  // 类的声明结束
Student stud1,stud2; //定义stud1和stud2为Student类的变量,称为对象
int main( )            // 主函数首部
{  stud1.setdata( );  // 调用对象stud1的setdata函数
    stud2.setdata( );  // 调用对象stud2的setdata函数
    stud1.display( );  // 调用对象stud1的display函数
    stud2.display( );  // 调用对象stud2的display函数
    return 0;
}
  在一个类中包含两种成员: 数据和函数,分别称为数据成员和成员函数。在C++中把一组数据和有权调用这些数据的函数封装在一起,组成一种称为“类(class)”的数据结构。数据成员num,score和成员函数setdata,display组成了一个名为Student的“类”类型。成员函数是用来对数据成员进行操作的。一个类是由一批数据以及对其操作的函数组成的。
  类可以体现数据的封装性和信息隐蔽。在上面的程序中,在声明Student类时,把类中的数据和函数分为两大类: private(私有的)和public(公用的)。把全部数据(num,score)指定为私有的,把全部函数(setdata,display)指定为公用的。在大多数情况下,会把所有数据指定为私有,以实现信息隐蔽。
具有“类”类型特征的变量称为“对象”(object)。
1.3.2用const定义常变量
#define PI 3.14159  //C语言中定义常变量的方法,有副作用;
C++的方法:const float PI =3.14159;或
float const PI =3.14159;能有效避免C方式的副作用。
const 可修饰指针:指向常变量的指针、常指针、指向常变量的常指针。
1)修饰一般常量和对象常量:
此时,const修饰符用在类型说明符前、后效果一样。
      const int a=1;
      int const a=1;
    这里定义了一个int类型的const常数变量a; 在程序的任何地方,a不能再被更新。
2)修饰指针:
    定义一个指向字符串的指针常量和定义一个指向字符串常量的指针时,const修饰符的位置不同,前者const放在*和指针名之间,后者const放在类型说明符前。
    char * const prt1=stringprt1;(prt1=stringprt2 错)
    const char * prt2=stringprt2;(*prt2=“abcd” 错)
  (1)  指向常量的指针是指:一个指向常量的指针变量。例如:
    const char* pc="abcd"; // 声明指向常量的指针
  (2)  常指针是指:把指针本身,而不是它指向的对象声明为常量。例如:
    char* const pc="abcd"; // 常指针
  (3)  指向常量的常指针是指:这个指针本身不能改变,它所指向的值也不能改变。要声明一个指向常量的常指针,二者都要声明为const。例如:
    const char* const pc="abcd";//指向常量的常指针
1.3.3函数原型声明
C的原型声明不严格:
    int max(int x,int y);
    int max ();
    max();
在C语言中以上方式均可。
C++的原型声明严格、强制性的。好处:可对程序的正确性进行严格检查。
1.3.4函数的重载
C语言规定在同一作用域中不能有同名的函数。
C++允许在同一作用域中用同一函数名定义多个函数(重载)。
例1.6  参数类型不同的重载函数
    int cube(int i)
    { return i*i*i; }
    float cube(float f)
    { return f*f*f; }
    double cube(double d)
    { return d*d*d;}
    int main()
    {  int i=12;
        float f=3.4;
        double d=5.67;
        cout<<i<< * <<i<< * <<i<< = <<cube(i)<<endl;
        cout<<f<< * <<f<< * <<f<< = <<cube(f)<<endl;
        cout<<d<< * <<d<< 指针调用成员函数* <<d<< = <<cube(d)<<endl;
        return 0; }
三、课堂小节
1.“//”注释至行尾;
2.变量需要时再定义;
3.提供了cin、cout流I/O方式;
4.用const定义常量;
5.用函数模板简化同一类型的函数编程。