解答几个c++问题?

C+程序设计基础(第4版)(上)习题与解答第1章 基本数据与表达式1.1 选择题1一个最简单的C+程序,可以只有一个( C )。(A)库函数(B)自定义函数(C)main函数(D)空函数2用C+语言编写的源程序要成为目标程序必须要经过( D )。(A)解释(B)汇编(C)编辑(D)编译3C+程序中的简单语句必须以( B )结束。(A)冒号(B)分号(C)空格(D)花括号4假设有说明 go(C)sizeof case extern(D)switch float integer7按C+标识符的语法规定,合法的标识符是( A )。(A)_abc(B)new(C)(D)age8在C+语句中,两个标识符之间( A )不能作为C+的分隔符。(A)数字(B);(C):(D)+9下列正确的八进制整型常量表示是( B 思考题1什么是数据类型?变量的类型定义有什么作用?【解答】数据“类型”是对数据的抽象。类型相同的数据有相同的表示形式、存储格式以及相关的操作。定义一个变量时,计算机根据变量的类型分配存储空间,并以该类型解释存放的数据。2普通数据类型变量和指针类型变量的定义、存储和使用方式有何区别?请编写一个程序验证之。【解答】变量类型定义存储使用方式数据类型 3什么是数据对象的引用?对象的引用和对象的指针有什么区别?请用一个验证程序说明之。【解答】引用是为数据对象定义别名。引用与指针有以下几点区别:(1)引用名不是内存变量,而指针变量要开辟内存空间。(2)引用名需要在变量定义与变量名绑定,并且不能重定义;指针变量可以在程序中赋给不同的地址值,改变指向。(3)程序中用变量名和引用名访问对象的形式和效果一样;指针变量通过间址访问对象。验证程序:#includeusing error!n;/防止意外错误2什么叫做循环控制?归纳比较C+语言中各种循环控制语句的语法、循环条件和循环结束条件的表示形式及执行流程。【解答】循环控制是在特定的条件下,程序重复执行一些特定动作。语句语法执行流程使用场合while语句while(表达式)循环体;循环条件:表达式值为非0(真)循环结束条件:表达式值为0(假)程序中常用于根据条件执行操作而不需关心循环次数的情况。先判断形式循环,条件不成立时不进入循环体。do-while语句do循环体while(表达式);循环条件:表达式值为非0(真)循环结束条件:表达式值为0(假)程序中常用于根据条件执行操作而不需关心循环次数。后判断形式循环,至少执行1次循环体。一般情况,while语句和do while语句可以互换使用。for 语句for(表达式1;表达式2;表达式3)循环体;(1)表达式1称为初始化表达式,不是循环体执行部分。(2)表达式3称为后置表达式,作为循环体的最后一个执行表达式。(3)循环条件:表达式2值为非0(真)循环结束条件:表达式2值为0(假)for语句称为步长循环语句,通常用于确定循环次数的情况。由于语句的3个表达式均可以缺省,也可以用于条件循环,即循环次数不确定的情况。3根据一个实际问题,用不同的循环语句编程,分析其优缺点。【解答】略。4用if语句和goto语句组织循环,改写上面第3题编写的程序,并分析在什么情况下可以适当使用goto语句。【解答】在不破坏程序基本流程控制的情况下,可以适当使用goto语句实现从语句结构内部向外的必要跳转,即按特定条件结束结构语句块的执行。程序略。5. 4b: 99等于9【解答】在if语句的判断表达式(a=b)中,赋值号“=”应该是逻辑等“=”。从语法上,C+的if语句把a=b这个赋值表达式视为逻辑表达式,没有编译错误。a=b的值决定于b。若b的输入值不等于0,if语句的判断表达式作为逻辑真(true),否则作为逻辑假(false)。所以,题目中输入b的值虽然不等于a,但表达式a=b为逻辑true,执行了if语句的第1个分支。2.4

}

我看了一下你首先是对操作符重载还不是很理解,其次,你还不知道在C++中有初始化列表这个玩意儿,下面分别给你讲解下
3. 怎样实现操作符重载:要实现操作符重载就要使用操作符重载函数,操作符重载函数用关见字operator实现,其形式为:反回类型 operator 操作符 (参数列表){}。操作符重载函数是一个函数,只不过这个函数的函数名为operator再加上后面要重载的操作符而已,比如要重载+号,则: hyong operator +(hyong m){}这就声明了一个反回类型为hyong的操作符函数,其函数名为operator +
4. 操作符重载函数作为类的成员和友元或者独立于类的区别:当操作符重载函数作为类的成员函数时,操作符重载函数的参数会比作为友元或者独立于类的操作符重载函数少一个参数,因为操作符重载类成员函数把调用该函数的第一个类的对象作为函数的第一个参数,也就是隐含的this指针指向调用该函数的第一个对象,所以会少一个参数。
5. 调用操作符重载函数的方式:
5.1 调用类中的操作符重载函数的方法:当调用类中定义的操作符重载函数时最左边的对象是调用操作符重载函数的对象。比如在类hyong中重定义的+操作符 hyong operator +(hyong m){},有类hyong的对象m和n则调用操作符重载函数的方法有m+n和m.operator +(n),前一条语句会自动转换为后面这条语句,且m+n的表达式中最左边的对象是调用操作符重载函数的对象,而最右边的那个将被作为参数传送。也就是说n+m会转换成n.operator +(m)。要记住当调用类中定义的操作符重载函数时最左边的对象是调用操作符重载函数的对象。
5.2 调用友元或独立的操作符重载函数的方法:当调用类的友元操作符重载函数或独立的操作符函数时语句m+n会转换为显示的调用方式,比如有友元或独立操作符重载函数hyong operator +(hyong a, hyong b){}则当出现m+n时会转换成语句operator +(m, n)表达式的第一个对象传给第一个参数,第二个对象传给第二个参数。
6. 什么情况下需要把操作符函数作为类的友元或者类的成员:一般来说操作符重载函数一般不要求作为类的成员函数或者是友元函数,一般情部下可以将操作符重载函数作为类的成员函数。但是有一种情况必须要求操作符函数作为类的友元函数或者是独立的函数,就是一个内置类型和对象相加的情况。比如有语句m+1和1+m第一条可以在类中定义操作符函数的形式为hyong operator +(int i){},语句m+1可以调用这个函数是正确的,但对于1+m就不能调用这个函数了,因为类中的操作符重载函数是最左边的对象是调用该函数的对象,但1+m最左边的是一个内置整型类型1,所以不会调用这条语句,对于这种语句就只能把操作符重载函数定义为独立的函数或类的友元函数即形如hyong operator +(int i , hyong a){}这样1+m就会转换成operator +(1, m)这样就是正确的。当然如果这个操作符重载函数需要访问类中的私有成员时,就应把该函数定义为类的友元函数,如果不需要访问类中的私有成员,则可以定义为友元也可以定义为独立函数。
7. 必须把操作符函数作为类成员函数的运算符有:(),[],->和任何赋值运算符,重载这些运算符时必须把操作符函数声明为类的成员函数。
8. 重载操作符的限制:
8.1 并不是所有的操作符都能被重载。除了. ,.* ,:: ,? : ,sizeof,typeid这几个运算符不能被重载,其他运算符都能被重载
8.2 重载不能改变该运算符用于内置类型时的函义,程序员不能改变运算符+用于两个int型时的含义。
8.3 运算符函数的参数至少有一个必须是类的对象或者类的对象的引用。这种规定可以防止程序员运用运算符改变内置类型的函义。
8.4 重载不能改变运算符的优先级。
8.5 重载不能改变运算符的结合律。
8.6 重载不能改变运算符操作数的个数。比如+需要两个操作数,则重载的+也必须要有两个操作数。
9. 反回类型问题,在某些情况下操作符函数必须反回一个对象类型作为反回值,比如有hyong的对象a,b,c则语句a=b+c其中重载的+操作符就必须反回一个hyong类型的一个对象,以便赋给对象a,不然该语句就会出错。当然你可以在语句中反回一个临时对象,也可以反回一个对象的引用,或者反回this指针,不过反回临时对象会浪费内存开销,所以最好反回类对象的一个引用。
10.参数传递问题,操作符函数可以按值传递也可以按引用传递,这根据操作符而定,比如对于+运算符既可以把对象按值传递给操作符函数也可以按引用传递给操作符函数,而且+操作符不会改变原操作数的值,所以应把传递类型声明为const,比如hyong operator +(const hyong &a, const hyong &b){}。但对于要改变其自身值的操作符比如++运算符,就必须传递引用,且不能把该引用声明为const类型,因为如果操作数按值传递的话,传递给操作数函数的将是一个对象的副本,两个副本是独立的,不能改变到原对象的值,所以应按引用传递对象,比如hyong operator ++(hyong &a){}。

1.例:假如定义了类www则www::www (int i, int j, int k):x (i), y(j), z(k){},定义了一个带i,j,k三个参数的构造函数,并将参数i赋给类www的成员变量x,参数j赋给y,参数k赋给z.注意参数列表形式,它们之间用:隔开.带一个参数的初始化列表为www(int i):x(i),y(1),z(1){}该语句定义了一个带一个参数i的构造函数,且把i赋给类的成员变量x,把1赋给成员变量y和z。
2. 没有在初始化列表中提及的成员变量使用与初始化变量相同的规则来初始化该变量,即全局变量初始化为0,而局部变量就没有确定的值,即使类中定义有默认构造函数且初始化了初始化表中没提及的变量,只要调用了初始化列表来初始化类的对象,这时这个未被初始化提及的变量也不会被默认构造函数初始化,而是按初始化变量的规则来初始化这个变量的。
3. 初始化的次序问题:初始化列表的初始化次序是按成员变量在类中的声明次序执行的,而不是按初始化列表列出的顺序初始化的,例如在类hyong中依次声明int a,b,c;那么hyong():c(a),b(2),a(3){}语句执行顺序是先把a初始化为3,再把b初始化为2,最后把a的值赋给变量c,这是正确的,但是hyong():c(1),b(2),a(c){}就会出错,因为这时执行顺序是先把变量c的值赋给变量a,而不是先把整数1赋给变量c,所以这时变量c还未被初始化,而变量a就会得到一个错误的值。
4. 必须使用初始化列表的情形:因为不能直接在类定义中直接初始化变量,而const类型的变量和引用类型的变量又必须在声明时进行初始化,const类型的变量只能初始化不能进行赋值,比如hyong类中定义了const int a变量,而在hyong::hyong(){a=1;}这时就会发生错误,const变量不能赋值,只能初始化。这时就发生了毛盾,解决的方法就是使用初始化列表,即const类型的变量和引用类型的变量必须在初始化列表中初始化,比如初始化hyong类中的const变量a时就应这样写hyong::hyong():a(1){}就是正确的表达式。
5. 在类中声明了const类型的变量,所有的构造函数都必须使用初始化列表的形式以便初始化const类型的变量。记住是所有的构造函数,也就是你每定义一个构造函数都必须初始化const变量。

以上内容节选自本人的文库的文章
《C++操作符重载专题》
《C++构造函数,复制构造函数和析构函数专题》
如果你有兴趣可以去下载,了解了解。具体的例子就在这两篇文章中,这里不给出例子,只给出文字描术,希望对你有帮助

//这里x(i)和y(j)是什么函数,为什么有myvector以后还有它们
这个是给x赋初值i,给y赋初值j
至于那个运算符重载,一个参数表示和两个参数其实差不多啊,你只要把调用+的变量算做一个默认参数,那就也是2个参数了啊


· 超过17用户采纳过TA的回答

下载百度知道APP,抢鲜体验

使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。

}

题目是用选择法对10个整数进行由小到大排序。

     不同点在于红色标记的地方。我的编程没有设置变量K,但是答案设置了。我个人觉得有没有K都无所谓啊,但是实际运行我的是错误的,答案是正确的。我很想知道这个K起到什么作用?为什么非要弄个K呢?求大神的详细解答啊

}

我要回帖

更多关于 c++答案 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信