首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 两个关于运算符的问题求解 最好能解释解释! [已结帖,结帖人:jinder22]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jinder22
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-11-20 23:54:19 楼主
    1 Which of the following options are returned by the typeid operator in C++? (C++里面的typeid运算符返回值是什么)
    A. A reference to a std::type_info object (type_info对象的引用)
    B. A const reference to a const std::type_info object (type_info常量对象的常量引用)
    C. A const std::type_info object (type_info常量对象)
    D. A reference to a const std::type_info object (type_info常量对象的引用)
    E. A const reference to a std::type_info object (type_info对象的常量引用)


    2 Which of the following statements accurately describe unary operator overloading in C++? (一元运算符重载,下列说法正确的是:)
    A. A unary operator can be overloaded with no parameters when the operator function is a class member. (当运算符函数是一个类成员时,一元运算符能被无参形式重载)
    B. A unary operator can be overloaded with one parameter when the operator function is a class member. (当运算符函数是一个类成员时,一元运算符能被带一个参数形式重载)
    C. A unary operator can be overloaded with one parameter when the operator function is free standing function (not a class member). (当运算符函数是一个独立函数时,一元运算符能被带一个参数形式重载)
    D. A unary operator can only be overloaded if the operator function is a class member. (当且仅当运算符函数是一个类成员时,一元运算符才会被重载)
    E. A unary operator can only be overloaded with no parameters when the operator function is a free standing function. (当且仅当运算符函数是一个独立函数时,一元运算符才会被重载)
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zmlovelx
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-21 09:58:251楼 得分:4
    The result of typeid is a const type_info&.
    所以第一个选D

    当运算符重载为类的成员函数时,函数的参数个数比原来的运算数个数要少1
    第二个选A (this指针是隐含的)

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chenzhp
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-21 10:02:322楼 得分:1
    第二题选A。如果是类成员,会有一个隐含的this指针指向它
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liumingrong
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-21 10:16:483楼 得分:5
    1. typeid传回一个const type_info&, type_info类型对一个特定的类来说是固定的
    2. 对一元运算符,比如++,成员函数重载的话需要一个额外的参数区别两者,
    operator++();  //前加
    operator++(int); //后加
    对非成员函数
    operator++(A&);
    operator++(A&, int);
    选B


    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ztz0223
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-21 10:23:364楼 得分:10
    C/C++ code
    D. A reference to a const std::type_info object (type_info常量对象的引用)

    第二个应该是E吧
    C/C++ code
    E. A unary operator can only be overloaded with no parameters when the operator function is a free standing function. (当且仅当运算符函数是一个独立函数时,一元运算符才会被重载)

    选b的给我重载看看!,this'是实参,不是类型,实参不改变重载

    还有:
    C/C++ code
    operator++(int); //后加

    如果是成员函数,他是一元的啊?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Leejun527
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-21 10:32:145楼 得分:0
    友元函数算不算free standing function?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liumingrong
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-21 10:37:256楼 得分:0
    大哥,你认为a++和++a是怎么实现的呢?
    引用 4 楼 ztz0223 的回复:
    C/C++ codeD. A reference to a const std::type_info object (type_info常量对象的引用)


    第二个应该是E吧

    C/C++ codeE. A unary operator can only be overloaded with no parameters when the operator function is a free standing function. (当且仅当运算符函数是一个独立函数时,一元运算符才会被重载)


    选b的给我重载看看!,this'是实参,不是类型,实参不改变重载

    还有:

    C/C++ codeoperato…
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jinder22
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-21 10:38:557楼 得分:0
    第一题没什么疑问 第二题到底选什么呢?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ztz0223
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-21 10:48:198楼 得分:0
    C/C++ code
    operator++(int); //后加


    如果是成员函数,那么他就是二元的
    我希望你区看看c++编程思想
    我手头上暂时没有,放实验室了
    但是这个我还是确信的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ztz0223
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-21 10:49:289楼 得分:0
    第二题,C可以,但是e最准确
    我觉得
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liumingrong
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-21 10:58:1610楼 得分:0
    你这么确定?
    #include <iostream>
    using namespace std;
    class A
    {
    int a;
    public :
    A():a(1){}
    void operator++()
    {
    a += 1;
    }

    void operator++(int)
    {
    a += 2;
    }
    };
    void main(  )
    {
    A a;
    ++a;
    a++; //这是二元操作吗?
    }
    引用 8 楼 ztz0223 的回复:
    C/C++ codeoperator++(int); //后加

    如果是成员函数,那么他就是二元的
    我希望你区看看c++编程思想
    我手头上暂时没有,放实验室了
    但是这个我还是确信的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ztz0223
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-21 11:04:0711楼 得分:0
    C/C++ code
    ++a; a++; //这是二元操作吗? }


    受不了了
    这个是二元的,对你真的无语
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liumingrong
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-21 11:11:1512楼 得分:0
    你认为它是二元的?那你回去翻翻你的编程思想再来吧
    如果你认为它是一元的,那你认为它应该调用哪个函数呢?
    引用 11 楼 ztz0223 的回复:
    C/C++ code++a;
    a++; //这是二元操作吗?
    }


    受不了了
    这个是二元的,对你真的无语
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jinder22
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-21 11:17:2113楼 得分:0
    二元 和 一元 到底区别在哪?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hai040
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-21 11:39:1214楼 得分:0
    关于i++和++i
    C/C++ code
    i++; 0041301E push 0 00413020 lea ecx,[i] 00413023 call c::operator++ (4116D6h) ++i; 00413028 lea ecx,[i] 0041302B call c::operator++ (41199Ch)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ztz0223
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-21 12:01:5115楼 得分:0
    引用 14 楼 hai040 的回复:
    关于i++和++i

    C/C++ code
        i++;
    0041301E  push        0   
    00413020  lea        ecx,[i]
    00413023  call        c::operator++ (4116D6h)
        ++i;
    00413028  lea        ecx,[i]
    0041302B  call        c::operator++ (41199Ch)


    非成员函数不予以考虑
    我还是建议
    liumingrong
    回去看书!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ztz0223
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-21 12:02:4916楼 得分:0
    C/C++ code
    当运算符重载为类的成员函数时,函数的参数个数比原来的运算数个数要少1
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liumingrong
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-21 12:23:3317楼 得分:0
    我建议你好好看看我前面的回复
    引用 15 楼 ztz0223 的回复:
    引用 14 楼 hai040 的回复:
    关于i++和++i

    C/C++ code
        i++;
    0041301E  push        0   
    00413020  lea        ecx,[i]
    00413023  call        c::operator++ (4116D6h)
        ++i;
    00413028  lea        ecx,[i]
    0041302B  call        c::operator++ (41199Ch)


    非成员函数不予以考虑
    我还是建议
    liumingrong
    回去看书!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jinder22
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-21 12:33:3318楼 得分:0
    两位不要动怒 钻研问题嘛~~~

    刚才liumingrong  的程序我调试了一下
    #include <iostream>
    using namespace std;
    class A
    {
        private:
        int a;
        public :
        A(){a=0;}
        void operator++()
        {
            a += 1;
        }
       
        void operator++(int)
        {
            a += 2;
        }
        friend void print(const A &c);
    };

    void print(const A &c)
    {
        cout < <c.a;
    }

    int main(  )
    {
        A classa;
        print(classa);
        ++classa;
       
        print(classa);
        classa++; //这是二元操作吗?
        print(classa);
       
        return 0;
    }

    输出是 0  1  3
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jinder22
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-21 12:35:5919楼 得分:0
    < <C++编成思想>>上面的一段话

    对于二元运算符,单个参数是出现在运算符
    右侧的那个。当一元运算符被定义为成员函数时,没有参数。成员函数被运算符左侧的对象调
    用。
    对于非条件运算符(条件运算符通常返回一个布尔值),如果两个参数是相同的类型,希
    望返回和运算相同类型的对象或引用。如果它们不是相同类型,它作什么样的解释就取决于程
    序设计者。用这种方法可以组合复杂的表达式:
    K += I + J ;
    运算符+号产生一个新的整数(临时的),这个整数被用作运算符‘ + =’的r v参数。一旦这
    个临时整数不再需要时就被消除。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jinder22
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-21 12:37:4820楼 得分:0

    还有一段话:

    11.2 语法
    定义一个重载运算符就像定义一个函数,只是该函数的名字是o p e r a t o r @,这里@代表运
    算符。函数参数表中参数的个数取决于两个因素:
    1) 运算符是一元的(一个参数)还是二元的(两个参数)。
    2) 运算符被定义为全局函数(对于一元是一个参数,对于二元是两个参数)还是成员函数
    (对于一元没有参数,对于二元是一个参数— 对象变为左侧参数)。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liumingrong
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-21 12:58:1621楼 得分:0
    自增(或自减)是特殊的一元操作符,如果要实现前缀和后缀就可以在类内实现重载(类外类似,加上对象的引用),方法是加一个哑元参数
    对于其它一元操作符,作为成员函数不需要参数(如果你要说有参数的话,那所有的成员函数都有一个编译器安插的隐式的this指针参数)

    引用 20 楼 jinder22 的回复:

    还有一段话:

    11.2 语法
    定义一个重载运算符就像定义一个函数,只是该函数的名字是o p e r a t o r @,这里@代表运
    算符。函数参数表中参数的个数取决于两个因素:
    1) 运算符是一元的(一个参数)还是二元的(两个参数)。
    2) 运算符被定义为全局函数(对于一元是一个参数,对于二元是两个参数)还是成员函数
    (对于一元没有参数,对于二元是一个参数— 对象变为左侧参数)。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ztz0223
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-21 14:17:0122楼 得分:0
    经过鉴定,liumingrong
    很无敌,后缀++是二元的操作符
    说了n遍了
    C/C++ code
    operator++(int); //后加 如果是成员函数,那么他就是二元的


    怎么在你眼睛里面就是一元了呢?
    常识性问题啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • taodm
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 5

      3

    发表于:2008-11-21 14:38:0823楼 得分:0
    兄弟,多看点书吧,《The C++ Programming language 》se版,书后索引里找找unary operator吧。
    引用 22 楼 ztz0223 的回复:
    经过鉴定,liumingrong
    很无敌,后缀++是二元的操作符
    说了n遍了
    C/C++ codeoperator++(int);//后加如果是成员函数,那么他就是二元的

    怎么在你眼睛里面就是一元了呢?
    常识性问题啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fengxuxing
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-21 14:39:4924楼 得分:0
    mark
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ztz0223
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-21 15:12:3825楼 得分:0
    引用 23 楼 taodm 的回复:
    兄弟,多看点书吧,《The C++ Programming language 》se版,书后索引里找找unary operator吧。
    引用 22 楼 ztz0223 的回复:
    经过鉴定,liumingrong
    很无敌,后缀++是二元的操作符
    说了n遍了
    C/C++ codeoperator++(int);//后加如果是成员函数,那么他就是二元的

    怎么在你眼睛里面就是一元了呢?
    常识性问题啊


    我也不好怎么说你,你看看c++ 标准如何?
    13.5.1 Unary operators [over.unary]
    1 A prefix unary operator shall be implemented by a non-static member function (9.3) with no parameters or
    a non-member function with one parameter. Thus, for any prefix unary operator @, @x can be interpreted as
    either x.operator@() or operator@(x). If both forms of the operator function have been declared,
    the rules in 13.3.1.2 determine which, if any, interpretation is used. See 13.5.7 for an explanation of the
    postfix unary operators ++ and --.
    2 The unary and binary forms of the same operator are considered to have the same name. [Note: consequently,
    a unary operator can hide a binary operator from an enclosing scope, and vice versa. ]
    13.5.2 Binary operators [over.binary]
    1 A binary operator shall be implemented either by a non-static member function (9.3) with one parameter or
    by a non-member function with two parameters. Thus, for any binary operator @, x@y can be interpreted as
    either x.operator@(y) or operator@(x,y). If both forms of the operator function have been
    declared, the rules in 13.3.1.2 determines which, if any, interpretation is used.


    这个是二元操作符的定义:

    A binary operator shall be implemented either by a non-static member function (9.3) with one parameter or
    by a non-member function with two parameters.

    非成员函数操作符,如果是带一个参数就是二元的
    哎,我不晓得是你的书好,还是c++的标准好!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ztz0223
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-21 15:13:2826楼 得分:0
    非成员函数操作符,如果是带一个参数就是二元的
    哎,我不晓得是你的书好,还是c++的标准好!

    说错了
    是非static成员函数操作符
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • taodm
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名: