精华内容
下载资源
问答
  • foo正确的原型链如下图: <p><img alt="oop-2" src="https://raw.github.com/maxzhang/maxzhang.github.com/master/articles/images/oop-2.png" /></p> <p><strong>Note:</strong><strong>proto属性...
  • 大家一定要认真做完标清题号和答案打包提交最后我会把答案通过群邮件发给大家 一 单项选择题 1.... 以下说法中正确的是: A C语言程序总是从第一个的函数开始执行 B 在C语言程序中,要调用的函数必须在main)函数中定义 C
  • php高级开发教程说明

    2008-11-27 11:39:22
    出重要的部分,然后把这些部分译成正确的代码。这个分析过程分两步执行:形式分析和逻辑 分析。首先通过检查文章的可视结构来执行形式分析,例如:检查段落、行、列甚至词之间的 空隙。这一过程打破了对文章的整体...
  • 你必须知道495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    1.27 我编译器总在报函数原型不匹配错误,可我觉得没什么问题。这是为什么? 1.28 文件中第一个声明就报出奇怪语法错误,可我看没什么问题。这是为什么? 1.29 为什么我编译器不允许我定义大数组,如...
  • 线程创建与撤销

    2011-09-15 17:01:39
     lpStartAddress,指向线程函数的指针,形式:@函数名,函数名称没有限制,但是必须以下列形式声明:  DWORD WINAPI ThreadProc (LPVOID pParam) ,格式不正确将无法调用成功。  lpParameter:向线程函数传递...
  • 《ASCE1885IT笔试面试题》---0000 0004

    千次阅读 2010-07-23 16:42:00
     说明函数原型时不需要指明每个函数参数名字,只需要说明每个参数类型和返回值类型就可以了。2. 所有表达式都有值。3. 程序编译是以文件为单位,因此将程序分到多个文件中可以减少每次对程序修改所...

    一、   对错题。判断以下说法的正确性,在下面表格中对应的编号下面写上“对”或“错”。(20分,每个题目2分)

    题号

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    /

    1  说明函数原型时不需要指明每个函数参数的名字,只需要说明每个参数的类型和返回值类型就可以了。

    2  所有的表达式都有值。

    3  程序的编译是以文件为单位的,因此将程序分到多个文件中可以减少每次对程序修改所带来的编译工作量。

    4  类的静态数据成员需要在定义每个类的对象时进行初始化。

    5  基类中被说明为protectedprivate的成员只能被其派生类的成员函数访问,不能被其它的函数访问。(别忘了友元)

    6  当将一个类S定义为另一个类A的友元类时,类S的所有成员函数都可以直接访问类A的所有成员。

    7  当函数的返回值是数组类型的,传递的是数组第一个元素的地址。

    8  如果派生类的成员函数的原型与基类中被定义为虚函数的成员函数原型相同,那么,这个函数自动继承基类中虚函数的特性。

    9  字符串hello,world在内存中存放时,占用11个字节的空间。0结束符不能丢)

    10 new动态申请的内存空间,必须用delete来释放

    ------------------------------------------------------------------------

     

    二、简单编程题。根据程序要求,写出函数的完整定义。(共25

    1.(本小题15分)写一个函数,找出给定字符串中数字字符(即0910个数字)的个数(如字符串olympic2000中数字字符的个数为4个。函数的原型为:

       int CalcDigital(char *str);

      函数参数:str为所要处理的字符串。

      函数返回值:所给字符串中数字字符的个数。

      int CalcDigital(char *str)

      {

    //在下面写出程序的实现 

      }

    1  程序为:

    int CalcDigital(char *str)

    {

      //判断字符指针是否为空

      if(str==NULL)

             return 0;

      //记录数字字符个数的变量

      int num_of_digital=0;

      //依次检查各个字符,如果是数字,则总数加1

      for(int i=0; str[ i ]!=0x0; i++)

             if(str[ i ]<='9' && str[ i ]>='0')

                       num_of_digital++;

      //返回数字字符个数

      return num_of_digital;

    }

     

    2.(本小题10分)用递归函数完成以下运算:

    sum(n)=12+22++n2

    函数的原型如下:

        long sum(int n);

    该函数完成12+22++n2的运算,并返回运算结果,其中n>0

    提示:你可以使用递归表达式:sum(n)=sum(n-1)+n2

    long sum(int n)

    {

    }

     

    2 程序为:

    long sum(int n)

    {

      if(n==1)

             return 1;

      else

             return n*n+sum(n-1);

    }

     

    三、             (本小题30分)

      下面的文件queue.h是一个队列类模板Queue的完整实现。在这个文件中首先定义了一个队列元素类模板QueueItem,然后在这个类的基础上定义了队列类模板Queue。在Queue中使用链表存放队列的各个元素,front指针指向链表的第一个节点元素,back指针指向链表的最后一个节点元素,成员函数add()将一个新节点元素加入到队列结尾,remove()从队列开头删除一个节点元素。为方便起见,程序中加上了行号。阅读程序,根据程序后面的问题作出相应解答。

    /*****************文件queue.h**************************************/

    /******************************************************************/

    1           template<class Type>

    2           class Queue;

    3           /**********定义模板类QueueItem*******************************/

    4           template <class Type>

    5           class QueueItem

    6           {

    7             public:

    8               QueueItem(const Type &elem):item(elem){}

    9               QueueItem(){}

    10          private:

    11            Type item;

    12            QueueItem *nextItem;

    13            friend class Queue<Type>;

    14        };

    15        /***************定义模板类Queue*****************************/

    16        template<class Type>

    17        class Queue{

    18          public:

    19            Queue():front(NULL),_______A_______{}

    20            ~Queue();

    21            Type remove();

    22            void add(const Type &);

    23            bool is_empty()const {return  ____B____;}

    24          private:

    25            QueueItem<Type> *front;

    26            QueueItem<Type> *back;

    27        };

    28        //模板类Queue的函数成员remove()的实现

    29        //从队列头取出一个节点,并返回该节点的值

    30        template<class Type>

    31        Type Queue<Type>::remove()

    32        {

    33          QueueItem<Type> *pFront; //指向头节点的临时指针

    34          Type retVal;  //返回值

    35           ____C____;

    36          retVal=pFront->item;

    37          front=pFront->nextItem;

    38          delete  pFront;

    39          return  retVal;

    40        }

    41        //模板类Queue的函数成员add()的实现

    42        template<class Type>

    43        void Queue<Type>::add(const Type& newItem)

    44        {

    45          QueueItem<Type> *pNew=new QueueItem<Type>;

    46          pNew->item=newItem;

    47          ____D____;

    48          if(front==NULL)

    49            front=back=pNew;

    50          else

    51          {

    52             back->nextItem=pNew;

    53             ____E____;

    54           }

    55        }

    56        

    57        template <class Type>

    58        Queue<Type>::~Queue()

    59        {

    60          QueueItem<Type> *p=front, *q;

    61          while(p!=NULL)

    62          {

    63             q=p->nextItem;

    64             delete p;

    65             p=q;

    66           }

    67        }

    问题1:(每个填空3分,共15分)程序中有几处填空,将它们完成。

    A______________________________________________

    B______________________________________________

    C______________________________________________

    D______________________________________________

    E______________________________________________

     

    问题2:(本小题3分)题中程序第12行为什么要说明一下类模板Queue?如果没有这两行语句,程序还正确吗?

    答:

    问题3:(本小题4分)程序第2223行各有一个const,它们各自表示什么含义?

    答:

    问题4:(本小题3分)程序中模板类Queue的析构函数主要做了什么事情?为什么要这么做?

    答:

    问题5:(本小题5分,每答对一个给1分)下面的程序使用了queue.h文件中定义的类模板,说明程序中哪些定义队列对象的语句是不正确的,哪些是正确的?

    #include queue.h

    void main()

    {

      Queue  q1;                                  //1

      Queue<int> q2;                      //2

      Queue<int> q3(100);             //3

      Queue<int> q4[100];             //4

      Queue<int> q5=new Queue<int>;   //5

      //

      delete q5;

    }

     

    答:

    语句号

    1

    2

    3

    4

    5

    /

     

     

     

     

     

    答案:

    问题1:答案为:

    Aback(NULL)

    Bfront == NULL back == NULL

    CpFront = front

    DpNew->nextItem = NULL

    Eback = pNew

    问题2

    答:不正确。因为在类QueueItem模板类的定义中用到了模板类Queue,而此

    Queue还没有定义,所以要先声明一下,告诉编译程序Queue是一个模板类

    ,它将在程序的其他地方定义。如果没有这个说明,编译程序就不知道标识

    Queue代表什么样的含义了。

    问题3

    答:第22行的const修饰的是函数的参数,表示在这个函数体中不能改它所修

    饰的参数所对应的实际参数的值。

    23行的const修饰的是模板类Queue的成员函数is_empty(),它表示在函数i

    s_empty()的函数体中不能改变任何数据成员的值。

    问题4

    答:析构函数中主要是释放链表中存放的各个节点的空间。因为Queue对象在

    其生存期间可能加入了很多节点,从堆中申请了一些内存空间,这些空间应

    该随着对象的消亡而释放掉,所以需要在析构函数中来释放这些空间。

    问题5

    语句号

    1

    2

    3

    4

    5

    /

     

     

     

     

     

    四、             (本小题16分)阅读下面的程序,写出程序运行的结果。

    /*************************************************************/

    #include <iostream.h>

    class A{

    private:

      //其它成员

    public:

      virtual void func(int data){cout<< "class A:"<<data<<endl;}

      void func(char *str){ cout<<"class A:"<<str<<endl; }

    };

     

    class B: public A{

    //其它成员

    public:

      void func() {cout<<"function in B without parameter! /n";}

      void func(int data) { cout<<"class B:"<<data<<endl; }

      void func(char *str){ cout<<"class B:"<<str<<endl;}

    };

    int main(int argc,char *argv[])

    {

      A *pA;

      B b;

      pA=&b;

      pA->func(1);

      pA->func("haha");

      return 0;

    }

    /*******************************************************************/

    问题1:(本小题4分)在下面写出程序的运行结果:

     

    问题2:(本小题2分)如下句所示,在函数main()中通过pA调用类B中定义的参数表为空的函数func()

      pA->func();

    是否正确?

    答:(正确/不正确)

     

     问题3:(本小题10分)如果要记录已尼创建的A类的实例(对象)的个数,我们可以借助于类的静态成员。修改上面类A的定义,使得它包含一个私有的静态成员object_count,记录属于该类的对象的个数,然后为类A增加必要的成员函数,使得下面的程序:

    void main()

    {

      A *pA=new A[3];

      cout<<"There are "<<pA->GetObjectCount()<<"objects"<<endl;

      delete []pA;

      cout<<"There are "<<A::GetObjectCount()<<"objects"<<endl;

    }

    得到的输出为:

    There are 3 objects

    There are 0 objects

    在下面写出类A的定义(将所有的函数成员实现写在类定义体中):

      

    在下面写出初始化类的静态成员object_count的语句:

    答案:

    问题1

    答:输出结果为:

    class
     B: 1

    class
     A: 
    haha

    问题2

    答:不正确。

    问题3:类A的定义如下:

    class A{

    private:

      static object_count;

      //其它成员

    public:

             A(){ object_count++;}

             ~A(){ object_count--; }

             static int GetObjectCount(){ return object_count; }

             //其它函数

             virtual void func(int data){cout<<"class A: "<<data<<endl; }

             void func(char *str){ cout<<"class A: "<<str<<endl; }

    };


    object_count
    的初始化语句如下:
    int
     A::object_count=0;

     

    五、(本题共9分)

    下面的程序定义了一个简单的SmallInt类,用来表示从-128127之间的整数。类的唯一的数据成员val存放一个-128127(包含-128127这两个数)之间的整数,为了方便,类SmallInt还重载了一些运算符。阅读SmallInt的定义,回答题目后面的问题。

     

    class SmallInt{

    public:

             SmallInt(int i=0);

             //重载插入和抽取运算符

             friend ostream &operator<<(ostream&os,const SmallInt &si);

             friend istream &operator>>(istream &is, SmallInt &si);

     

             //重载算术运算符

             SmallInt operator+(const SmallInt &si){return SmallInt(val+si.val);}

             SmallInt operator-(const SmallInt &si){return SmallInt(val-si.val);}

             SmallInt operator*(const SmallInt &si){return SmallInt(val*si.val);}

             SmallInt operator/(const SmallInt &si){return SmallInt(val/si.val);}

             //重载比较运算符

             bool operator==(const SmallInt &si){return (val==si.val);}

    private:

             char val;

    };

     

    SmallInt::SmallInt(int i)

    {

             while(i>127)

                       i-=256;

             while(i<-128)

                       i+=256;

             val=i;

    }

     

    ostream &operator<<(ostream &os,const SmallInt &si)

    {

             os<<(int)si.val;

             return os;

    }

     

    istream &operator>>(istream &is,SmallInt &si)

    {

             int tmp;

             is>>tmp;

             si=SmallInt(tmp);

             return is;

    }

    问题1:(本小题4分)上面的类定义中,重载的插入运算符和抽取运算符被定义为类的友元函数,能不能将这两个运算符定义为类的成员函数?如果能,写出函数原型,如果不能,说明理由。

    答:

     

    问题2:(本小题5分)为类SmallInt增加一个重载的运算符+=,函数原型:

    class SmallInt{

    public:

             SmallInt &operator +=(const SmallInt &si);

             //其它函数

    private:

             char val;

    };

    该函数将返回对当前对象的引用。如:

    SmallInt si1(20),si2(13);

    则表达式:

      si1+=si2

    将返回对象si1的引用,并且si1中的的值是si1.valsi2.val的值之和(但必须正规化为在-128127之间)。

    在下面写出重载的运算符+=的实现:

    答案:

    问题1

    答:不能将插入运算符和抽取运算符定义为类的成员函数。

    因为这两个运算符对第一个运算数有特殊的要求,即必须分别是ostreamistream类的对象,而不能是用户自己定义的其它类,而类的成员函数默认的第一个参数为指向该类对象的指针类型,所以不符合插入和抽取运算符的要求

    问题2

    重载的运算符的实现如下:

    SmallInt &SmallInt::operator+=(const SmallInt &si)

    {

             SmallInt tmp(val+si.val);

             val=tmp.val;

             return *this;

    }


    SmallInt &SmallInt::operator+=(const SmallInt &si)

    {

             val+=si.val;

             if(val>127)

                       val-=256;

             if(val<-128

                       val=256;

             return *this;

    }

     

     

    展开全文
  • 1.27 我编译器总在报函数原型不匹配错误,可我觉得没什么问题。这是为什么? 15 1.28 文件中第一个声明就报出奇怪语法错误,可我看没什么问题。这是为什么? 15 1.29 为什么我编译器不允许我定义大数...
  • 《你必须知道495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    1.27 我编译器总在报函数原型不匹配错误,可我觉得没什么问题。这是为什么? 15 1.28 文件中第一个声明就报出奇怪语法错误,可我看没什么问题。这是为什么? 15 1.29 为什么我编译器不允许我定义大数...
  • 街机1-源码

    2021-03-02 03:01:32
    还要确保在类和类原型函数正确使用了关键字this来引用调用该函数的对象。 应该使用有关如何1.运行和2.玩街机游戏的说明来更新您README.md文件。 有关如何入门详细说明,请参阅本。 贡献 该存储库是所有...
  • 1.派生类中重新定义了一个和基类中的原型完全相同的函数,这种情况不属于函数重载,属于重写 2.类中定义了两个同名、同参数表的函数,但其中一个是常成员函数,这种情况属于函数重载 第14题: 虚基类的正确声明为...

    第4题:

    理解函数重载的概念:

    以下为易混淆点

    1.派生类中重新定义了一个和基类中的原型完全相同的函数,这种情况不属于函数重载,属于重写

    2.类中定义了两个同名、同参数表的函数,但其中一个是常成员函数,这种情况属于函数重载

    第14题:

    虚基类的正确声明为:class B:virtual public A

    第15题:

    理解虚函数:

    虚函数既可以在函数说明时定义,也可以在函数实现时定义,这种说法错误

    第30题:

    定义派生类时,若不使用类关键字显式地规定采用何种继承方式,则默认方式为 私有  继承

    例子:

     

    #include <iostream.h>
    class Point {
    
    private:
    	int x,y;
    public:
    	Point(int a,int b){x = a;y = b;}
    	void show(){
    	
    	    cout << "x = " << x << ", y = " << y << endl;
    	}
    
    };
    class a: Point{
    private :
    	int H,W;
    public:
    	a(int a,int b,int h,int w):Point(a,b){
    	   H = h;
    	   W = w;
    	}
    	void show(){
    		Point::show();
    		cout << "H = " << H << ", W = " << W << endl;
    	}
    };
    class Test:public a{
      
    public:
    	Test(int a,int b,int h, int w):a(a,b,h,w){}
    	void show(){
    		a::show()
    		//Point::show();//error C2247: 'show' not accessible because 'a' uses 'private' to inherit from 'Point'
    	}
    };
    void main(){}

     

    第39题:

    重载的运算符保持其原有的运算符个数、优先级和结合性不变

    第49题:

    注意friend与static的区别和用法

    例子一:

     

     

    #include <iostream.h>
    #include <math.h>
    class dis{
    private:
    	double x,y;
    public:
    	dis(double x1,double y1){
    	  x = x1;
    	  y = y1;
    	}
    	double getx(){
    	   return x;
    	}
    	double gety(){
    	   return y;
    	}
    	friend double log(dis&,dis&);
    };
    double log(dis&a,dis&b){
       double px = a.x - b.x;
       double py = a.y - b.y;
       return sqrt(px*px + py*py);
    }
    void main(){
        dis p1(3.5,4.5),p2(5.5,6.5);
    	double d = log(p1,p2);
    	cout << "the distance is " << d;
    }
     
    例子二:
    #include <iostream.h>
    #include <math.h>
    class dis{
    private:
    	double x,y;
    public:
    	dis(double x1,double y1){
    	  x = x1;
    	  y = y1;
    	}
    	double getx(){
    	   return x;
    	}
    	double gety(){
    	   return y;
    	}
    	static double log(dis&,dis&);
    };
    double dis::log(dis&a,dis&b){
       double px = a.x - b.x;
       double py = a.y - b.y;
       return sqrt(px*px + py*py);
    }
    void main(){
        dis p1(3.5,4.5),p2(5.5,6.5);
    	double d = dis::log(p1,p2);
    	cout << "the distance is " << d;
    }
    
     
    第53题:
    有两个矩阵a和b,都是2行3列。求两个矩阵之和。重载运算符“+”,使之能用于矩阵相加。如c = a + b
    #include <iostream.h>
    class Mx {   
    private:
    	int m[2][3];
    public:
    	Mx();
    	friend Mx operator+ (Mx&,Mx&);
    	void input();
    	void show();
    };
    Mx::Mx(){
    	for(int i = 0; i < 2; i++ ) {
    		for(int j = 0 ; j < 3; j++ ){
    			m[i][j] = 0;
    		}
    	}
    }
    Mx operator+ (Mx& a, Mx& b){
    	Mx c;
    	for(int i = 0 ; i < 2 ; i++){
    		for(int j = 0 ; j < 3 ; j++){
    			c.m[i][j] = a.m[i][j]+b.m[i][j];
    		}
    	}
    	return c;
    }
    void Mx::input(){
    	cout << "输入矩阵的值:"
    		<< endl;
    	for(int i = 0 ; i < 2; i++){
    		for(int j = 0 ; j < 3 ; j++){
    			cin >> m[i][j];
    		}
    	}
    }
    void Mx::show(){
    	for(int i = 0 ; i < 2; i++){
    		for(int j = 0 ; j < 3; j++){
    			cout << m[i][j] << "  ";
    		}
    		cout << endl;
    	}
    }
    void main(){
    	Mx a,b,c;
    	a.input();
    	b.input();
    	cout << endl << "矩阵a:"
    		<< endl;
    	a.show();
    	cout << endl << "矩阵b:"
    		<< endl;
    	b.show();
    	c = a + b;
    	cout << endl << "矩阵c:"
    		<< endl;
    	c.show();
    }
     
    展开全文
  • 2.运行Qt Creator,首先弹出的是欢迎界面,这里可以打开其自带的各种演示 程序。 3.我们用File->New 菜单来新建工程。 4.这里我们选择Qt4 Gui Application。 5.下面输入工程名和要保存到的文件夹路径。我们这里的...
  •  由C系统提供,用户无须定义, 也不必在程序中作类型说明,只需在程序前包含有该函数原型的头文件即可在程序中直接调用。在前面各章例题中反复用到printf 、 scanf 、 getchar 、putchar、gets、puts、strcat等...
  • 你必须知道495个C语言问题(PDF)

    热门讨论 2009-09-15 10:25:47
    3, 有的为4, 哪个是正确的? . . . . . . . . . . . . . . . . . . . . . 14 3.4 这是个巧妙的表达式: a ˆ= b ˆ= a ˆ= b 它不需要临时变量就可 以交换a 和b 的值。. . . . . . . . . . . . . . . . . . . . . . ....
  • 校园导航系统(实现简单查询)

    热门讨论 2011-05-24 15:27:30
    于是我在search()函数中插入打印n 的语句,运行后发现输出的n为0,初始化数据中有11个结点,n应该为11,所以n 在这个地方发生错误,我又在main()主函数中打印出n 的值,n=11,是正确的。所以错误就在search()函数中...
  • C++复习资料之系列

    2008-12-30 21:35:45
    1.以下正确的函数原型为( d )。 (a) f( int x; int y ); (b) void f( x, y ); (c) void f( int x, y ); (d) void f( int, int ); 2.有函数原型 void fun1( int ); 下面选项中,不正确的调用是( c )。 (a) ...

空空如也

空空如也

1 2 3 4 5
收藏数 94
精华内容 37
关键字:

以下函数原型说明正确的是