C++程序设计教学大纲初级中级.docx

上传人:b****3 文档编号:4127613 上传时间:2023-05-06 格式:DOCX 页数:127 大小:63.60KB
下载 相关 举报
C++程序设计教学大纲初级中级.docx_第1页
第1页 / 共127页
C++程序设计教学大纲初级中级.docx_第2页
第2页 / 共127页
C++程序设计教学大纲初级中级.docx_第3页
第3页 / 共127页
C++程序设计教学大纲初级中级.docx_第4页
第4页 / 共127页
C++程序设计教学大纲初级中级.docx_第5页
第5页 / 共127页
C++程序设计教学大纲初级中级.docx_第6页
第6页 / 共127页
C++程序设计教学大纲初级中级.docx_第7页
第7页 / 共127页
C++程序设计教学大纲初级中级.docx_第8页
第8页 / 共127页
C++程序设计教学大纲初级中级.docx_第9页
第9页 / 共127页
C++程序设计教学大纲初级中级.docx_第10页
第10页 / 共127页
C++程序设计教学大纲初级中级.docx_第11页
第11页 / 共127页
C++程序设计教学大纲初级中级.docx_第12页
第12页 / 共127页
C++程序设计教学大纲初级中级.docx_第13页
第13页 / 共127页
C++程序设计教学大纲初级中级.docx_第14页
第14页 / 共127页
C++程序设计教学大纲初级中级.docx_第15页
第15页 / 共127页
C++程序设计教学大纲初级中级.docx_第16页
第16页 / 共127页
C++程序设计教学大纲初级中级.docx_第17页
第17页 / 共127页
C++程序设计教学大纲初级中级.docx_第18页
第18页 / 共127页
C++程序设计教学大纲初级中级.docx_第19页
第19页 / 共127页
C++程序设计教学大纲初级中级.docx_第20页
第20页 / 共127页
亲,该文档总共127页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C++程序设计教学大纲初级中级.docx

《C++程序设计教学大纲初级中级.docx》由会员分享,可在线阅读,更多相关《C++程序设计教学大纲初级中级.docx(127页珍藏版)》请在冰点文库上搜索。

C++程序设计教学大纲初级中级.docx

C++程序设计教学大纲初级中级

第一部分:

c++的入门,基本数据类型和输入输出,表达式和语句,以及过程化语句

1. 写出c++最简单的程序的模板

答:

#include

usingnamespacestd;

intmain(void)错误!

未找到索引项。

{

   cout<<"helloworld"<

 return0;

}

2. c++的注释方式

答:

(1) //

   

(2)/*something*/

3. c++中不同的教材中#include和 #include的区别

答:

(1)#include是标准化以前的头文件,现在的保留是为了以前程序代码的使用,但不在官方的标准中,同时中的声明是全局的。

  

(2)#include是ANSI标准委员会提供的头文件,同时包含在STD的名字空间中,因此使用的时候要加上usingnamespacestd;

  (3)为了程序对C的兼容,#include类似的头文件仍然可以使用,但不包含在std名字空间之中。

 (4)标准对c的类似的头文件做了改进,同时包含在std的名字空间之中,为了和旧的c头文件的区别,使用#include;

4. c++的常用保留字有哪些?

答:

(1)AnsiC规定32个保留字,ansic++新增加29个保留字。

主要有:

bool,catch,calss,delete,friend,inline,new,operator,private,protected,public,template,this,thow,true,virtual.

5. c++中的基本数据类型有哪些?

答:

(1)基本数据类型:

  int,char,wchar_t,float,double,bool,type[],type*,void,struct,union,enum,class,string,vector,list,set,

multiset,multimap,map,pair,stack,deque,引用数据类型。

6. typedef有哪些使用方式?

 答:

typedef是c/c++代码中经常用到的一个关键字.他的主要作用是给变量类型定义一个别名.从而达到代码简化,促进跨平台开发的目的.

(1)下面是typedef的最经常的用法:

typedefstruct{

inta;

intb;

}MY_TYPE;

这里把一个未命名结构直接取了一个叫MY_TYPE的别名,这样如果你想定义结构的实例的时候就可以这样:

MY_TYPEtmp;

这是typedef的第一种用法.比较简单.就是typedef原变量类型别名.相似的例子:

typedefunsignedlongDWORD;

typedefvoidfar*LPVOID;//voidfar*是原变量类型,表示一个void型指针(far在32位系统里面已经没有意义了)等等

(2)typedef还有第二种用法.函数指针的使用。

.

比如:

  typedefint(*MYFUN)(int,int);

这种用法一般用在给函数定义别名的时候.(其实质还是和上面的用法一样的)上面的例子定义MYFUN是一个函数指针,函数类型是带两个int参数,返回一个int.

7. 什么是字符串常量?

如何使用?

 答:

(1)字符串常量是一对双引号括起来的字符序列。

在c++中,把字符串常量称作c规格的字符串常量,字符串常量总是以’\0’结束。

(2)字符串的处理方式:

a.字符数组。

                    b.字符指针

                    c.string类型。

(3)字符串的常用函数:

Length() size() empty() c_str()substr()

Find() replace() at()

使用举例:

对字符串中的所有错误的”0”替换为”o”;

#include

#include

#include

#include

usingnamespacestd;

//字符串中的替换。

intmain(void)

{

    stringstr="hell0w0rld";

 string:

:

size_typepos;

 while

(1)

 {

      pos=str.find("0");

   if(pos==string:

:

npos)

   {

    break;

   }

   str.replace(pos,1,"o");

 }

 cout<

 return0;

}

8. 什么是枚举常量?

如何使用和定义?

答:

(1)枚举常量是一种符号常量,它不是变量,不占有内存空间。

   

(2)定义了枚举类型后,可以定义该枚举类型的变量。

变量的取值只能是枚举类型定义时规定的值。

    (3)定义枚举使用enum{},如果没有规定,第一个符号常量的枚举值就是0,其它枚举值依次增1。

    使用举例:

intmain(void)

{

 enumCOLOR{RED,WHITE,BLACK,GREEN,BLUE};

 COLORcolor=RED;

 intpaint=WHITE;

 cout<

}

9. 什么是常量?

常量如何定义?

答:

(1)常量是程序中不变的量,代表固定不变的值。

    

(2)定义常量的时候必须进行初始化;

   (3)常量名不能放在赋值语句的左边。

10. 左值和右值的区别?

  答:

(1)左值:

(leftvalue)是指能够出现在赋值表达式左边的表达式,左值具有存放数据的空间的功能。

      

(2)右值:

(rightvalue)只能出现在赋值表达式右边的值。

11. sizeof运算符的使用?

答:

(1)sizeof是运算符,不是函数。

   

(2)sizeof的操作结果类型为size_t,利用typedef关键对unsignedint做了别称。

它返回操作数或者类型在内存中的字节长度。

   (3)sizeof具有三中使用方式:

  a. sizeof(数据类型)

  b. sizeof(变量名称)

  c.sizeof变量名称。

代码举例如下

voidtestSizeof(charch[100])

{

   //数组做为函数的参数;

       cout<<"choffunctionis:

"<

}

//字符串中的替换。

intmain(void)

{

 

   inta;                 //普通变量

 char*s="ibm";            //指针变量

 charch[]="helloworld";  //字符数组

 charch2[100]="IBM";     //字符数组

 cout<<"ais:

"<

"<

"<

"<

  testSizeof(ch2);

 return0;

}

结果:

ais:

4sis:

4chis:

12ch2is:

100

choffunctionis:

4

12. c++中有哪些类型转换?

答:

(1)默认类型的转换(隐式类型的转换)

   

(2)强制类型的转换

  (3)命名类型的转换

命名类型的转换:

cast_name(expr);

(1) static_cast 静态的转换

(2) dynamic_cast 动态的转换

(3) const_cast     去掉类型的const特性

(4) reinterpre_cast  重新解释

(1).const_cast。

你知道,一个int*是可以直接赋给一个constint*的,但是一个constint*是不可以直接赋给一个int*的。

这就需要:

int*pi=const_castpci;

他还可以把volatile和对齐特性(alignment)去掉。

2.reinterpret_cast

就是:

把整型(广义的)转换为指针,把指针转换为整型(广义的),把指针转换为另一个类型的指针。

3.static_cast

可以做任何显式的自动转换(implicitcast),也可以做那些自动转换的逆转换,但是不能消除const,volatile和对齐。

4.dynamic_cast

就是根据类型信息来cast。

示例:

去掉const特性

intmain(void)

{

  inta=20;

  const int*p=&a;

  int*p2=const_cast(p);

  *p2=40;

  cout<

  

 return0;

}

//内存的重新解释:

intmain(void)

{

  inta=30;

  int*p=&a;

  intb=reinterpret_cast(p);

  cout<

 return0;

}

13. 增量表达式和短路表达式?

答:

(1)前增和后增的区别:

前增是先增再赋值,后增是先赋值再增

(2)如果多个表达式用&&进行连接,则一个表达式为假则真个表达式为假。

(3)如果多个表达式用||进行连接,则一个表达式为真,则真个表达式为真

第二部分:

c++中的函数,程序结构。

 作者:

魏华超    联系方式:

weihuachao@

1. 什么是函数原型?

答:

(1)函数原型是一条程序语句,它以分号结束。

它有函数的返回类型,函数名和参数列表组成。

  

(2)参数表包含所有参数的数据类型,参数之间用逗号分开。

C++中,函数的声明就是函数的原型。

  (3)标准库函数的声明都在头文件中提供。

  (4)函数原型和函数的定义必须在返回类型,函数名字和参数表上保持一致。

2. 全局变量和局部变量和静态变量的使用?

 答:

(1)一个程序将操作系统分配其运行的内存块分成4个区域:

a. 代码区,存放程序的代码,即程序中的各个函数的代码块。

b. 全局数据区,存放程序的全局数据和静态数据。

c. 堆区,存放程序的动态数据。

d. 栈区,存放程序的各个数据,函数中的变量

(2)在函数的外部定义的变量是全局变量。

全局变量有编译器建立,并且初始化为0。

该变量存放在全局数据区。

该变量的作用域在整个应用程序内有效。

如果调用不同源文件内的变量或者函数使用extern关键字。

Extern关键字仅是声明,不时变量的定义。

(3)在函数内部定义的变量是局部变量。

作用域函数的内部,生命的周期是函数的调用期间。

该变量存放在栈区。

(4)在局部变量的前面加上static关键字,就成了局部静态变量。

局部静态便领存放在内存的全局数据区。

作用域在函数的内部,生命周期整个应用程序。

(5)在全局变量的前面加上static关键字,是全局静态变量。

存放在全局数据区。

作用域在当前文件有效,生命周期整个应用程序。

(6)在函数的前面加上static关键字,则该函数只在当前文件内有效。

3. 什么是递归函数?

答:

递归函数是自调用函数,在函数内部直接或者间接的调用自己。

4. 什么是内联函数?

如何使用内联函数?

答:

(1)内联函数也称做内嵌函数,它主要是解决程序的运行效率。

(2)内联函数避免了函数的开栈和参数传递等时间,而是调用的时候进行代码的替换,提高程序的效率。

 (3)在函数的声明的时候加上inline关键字便可以使函数成为内联函数。

 

 (4)内联函数的定义应该放在头文件内。

5. 内联函数的函数体有哪些限制?

 答:

(1)内联函数不能有复杂的控制语句,如for,switch和while。

    

(2)递归函数不能是内联函数。

    (3)存在以上情况,编译器把内联函数当作普通的函数对待。

6. 什么是重载函数?

答:

(1)出现在相同作用域中的函数,具有相同的名字而行参表不同,则称为重载函数。

(2)重载函数必须在参数的类型,参数的个数和参数的顺序上不同,只有返回值的不同不能产生重载。

(3)不能用typedef定义的类型名来区分重载函数声明中的参数。

7. 重载函数的匹配顺序是什么?

答:

(1)寻找一个严格的匹配,如果找到了,就用那个函数。

(2)通过内部转换寻求一个匹配,如果找到了就用那个函数。

(3)通过用户自定义的转换,如果找到了,就用那个函数。

8. 什么是默认参数?

答:

(1)在函数的声明或者定义时对参数给定默认值的参数成为默认参数。

  

(2)函数的声明中如果提供了默认值,则函数的定义不允许默认值。

9. 默认参数的顺序规定?

答:

(1)函数的定义时默认值的顺序应该从右到左逐渐定义。

如果参数列表中的一个参数给定了默认值,则后边的所有的参数都必须给定默认值。

    

(2)函数的调用时,参数的顺序只能从左到右匹配。

10. c++中有哪些不同的作用域和声明周期?

答:

(1)c++中的作用域有:

局部作用域,函数作用域,文件作用域,函数原型作用域。

   

(2)c++中的生命周期有:

静态生命期,局部生命周期,动态生命周期。

11. 如何使用c++中的多文件结构?

答:

#ifndef_FILE_NAME

#define_FILE_NAME

#endif

12. 函数指针的概念和作用?

答:

(1)函数指针是指向函数而非指向对象的指针。

函数指针的类型由返回类型和行参表来确定,和函数的名称没有关系。

 

(2)可以使用typedef简化函数指针的定义。

例:

利用函数指针对不同的成员变量进行排序。

structStu

{

   stringname;

 intage;

};

boolcompareByName(Stu s1,Stus2)

{

      return(s1.name>s2.name);

}

boolcompareByAge(Stus1,Stus2)

{

       return(s1.age>s2.age);

}

voidsort(Stu*begin,Stu*end,bool(*com)(Stus1,Stus2))

{     

    Stutemp;

     for(inti=0;i

  {

     for(intj=0;j

   {

          if(com(begin[j],begin[j+1]))

     {

            temp=begin[j+1];

       begin[j+1]=begin[j];

       begin[j]=temp;

     }

   }

  }

}

intmain(void)

{

 Stustu[5];

 stu[0].name="rose";

 stu[0].age=20;

 stu[1].name="jack";

 stu[1].age=60;

 stu[2].name="lucy";

 stu[2].age=23;

 stu[3].name="tom";

 stu[3].age=70;

 stu[4].name="chal";

 stu[4].age=24;

   sort(stu,stu+5,compareByAge);

   for(inti=0;i<5;i++)

 {

       cout<<"nameis:

"<

"<

 }

 return0;

       

}

13. 如何使用c++中的动态链接库?

第三部分:

数组,指针,堆分配

 作者:

魏华超  联系方式weihuachao@

1. 数组如何定义?

数组的遍历和初始化?

答:

(1)数组是相同的数据类型在内存中连续存储的集合。

(2)数组的定义:

类型说明符 数组名【常量表达式】

(3)数组的名字代表数组的首元素的地址。

(4)因为连续存储,数组的遍历可以使用下标的索引也可以使用首地址加偏移量。

2. 数组作为函数的参数的传递方式是什么?

 答:

数组做为函数的参数按地址进行传递。

3. 数组作为函数的参数应该注意什么?

答:

(1)数组做为函数的参数,不对下标做检查,因此为了对边界的正确引用,有两种解决方案。

 

(2)标准库的规范。

传递指向数组的首地址和最后一个元素的下一个位置的指针。

数组中,数组的前一个位置是非法的,数组的后一个位置是合法的。

       例:

voidprintValue(constint*begin,constint*end)

             {

                  While(begin!

=end)

                    Cout<<*begin++<

}

 (3)c规范和标准c++前的规范:

数组作为函数的参数传递两个参数,一个数组的首地址,一个数组的大小。

4. 什么是vector?

答:

(1)vector是标准库的类型,是同一种类型的集合,每个对象都有对应的整数的索引值。

vector和string一样,可以管理自身的内存,因此vector称作容器。

  

(2)vector是模版机制,因此定义需要指定存储的类型。

5. vector的定义和遍历初始化?

答:

(1)vector定义的几种方式。

a. vectorv1;      v1空的容器。

b. vectorv2(v1);   v2是v1的一个副本

c. vectorv3(n,i)  n个为i的值

d. vectorv4(n)     n个元素。

e. vectorv5(begin,end) 主要是数组元素的拷贝

6. vector对象的操作:

(1)v.empty():

 如果V为空,返回true,否则返回false;

v.size()   返回V元素的个数。

v.push_back(t) 在V的末尾添加一个t的元素。

V[n]       返回v中小标为n的元素。

V1=v2      v1的元素替换为v2元素副本。

V1==v2    v1和v2比较,判断是否相等。

(2)利用下标访问元素,但下标不能向容器添加元素。

(3)下标只能修改已经存在的元素或者访问已经存在的元素。

7. 什么是迭代器?

如何使用?

   答:

(1)除了下标访问vector外,标准库提供了一种新的访问数据元素的方法:

iterator.迭代器是一种检查容器内元素并遍历容器内元素的的数据类型。

   

(2)标准库为每种容器都提供了iterator操作。

   (3)iterator使用begin()和end()方式遍历元素:

begin()返回容器首元素的地址。

End()返回末元素的下一个地址。

   (4)const_iterator该类型只能读取元素内的数据,不可以进行修改。

8. 如何使用vector作为函数的参数?

答:

(1)传递容器的两个地址:

   

(2)传递vector的引用或者指针。

9. 指针的作用?

举例讲述?

答:

(1)间接改变变量的值

  

(2)提高程序的效率。

10. 指针如何定义?

答:

(1)数据类型 *指针变量名。

(2)用&操作符取变量的地址。

 (3)用*间接引用指针。

(4)指针只有在指向合法而且有效的内存空间下才可以使用。

11. 指针变量作为函数的参数?

指针作为函数的返回值

     intcompare(constchar*str1,constchar*str2)

{

        for(;*str1==*str2;str1++,str2++)

  {

         if(*str1=='\0')

    {

           return0;

    }

  }

  return(*str1-*str2);

}

char*strcpy(char * strDest,const char * strSrc)

{

 if ((strDest==NULL)||(strSrc==NULL)) //[1]

      throw "Invalid argument(s)"; //[2]

      char * strDestCopy=strDest;  //[3]

      while ((*strDest++=*strSrc++)!

='\0'); //[4]strDest不能改为strDestCopy

      return strDestCopy;

}

12. new和delete如何正确的使用?

答:

(1)new与delete是C++语言特有的运算符,用于动态分配和释放内存。

  

(2)new用于为各种数据类型分配内存,并把分配到的内存首地址赋给相应的指针。

new的功能类似于malloc()函数。

使用new的格式为:

  <指针变量>new<数据类型>;

  其中,<数据类型>可以是基本数据类型,也可以是由基本类型派生出来的类型;<指针变量>取得分配到的内存首地址。

 (3) new有3种使用形式。

  a .给单个对象申请分配内存

  int*ip;

  ip=newint;//ip指向1个未初始化的int型对象

  该代码段首先定义了一个指向整型对象的指针,然后为该对象申请内存空间,如果申请成功,则ip指向一个int型对象的首地址。

  b. 给单个对象申请分配内存的同时初始化该对象

  int*ip;

  ip=newint(68);//ip指向1个表示为68的int型对象

  该代码段首先定义了一个指向整型对象的指针,然后为该对象申请内存空间,如果申请成功,则ip指向一个int型对象的首地址,并将该地址的内容初始化为68。

  C .同时给多个对象申请分配内存

  int*ip;

  ip=newint[5];//ip指向5个未初始化的int型对象的首地址

  for(inti=0;i<5;i++)

    ip[i]=5*i+1;//给ip指向的5个对象赋值

  该代码段首先定义了一个指向整型对象的指针,然后为5个int型对

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2