精华内容
下载资源
问答
  • c++中不能被重载的运算符有:1. .点2. ,逗号3. .* 4. ::5. ?:6.sizeof7.typeid

    c++中不能被重载的运算符有:

    1. .点

    2. ,逗号

    3.  .* 

    4.  ::

    5. ?:

    6.sizeof

    7.typeid

    展开全文
  • 关于C++赋值运算符能不能继承问题

    千次阅读 2016-03-30 14:29:16
    人说不能被继承,“赋值运算符重载函数”不是不能被派生类继承,而是被派生类默认“赋值运算符重载函数”给覆盖了。 条款45: 弄清C++在幕后为你所写、所调用函数 一个空类什么时候不是空类? ---- 当C++...

    C++的赋值运算符是可以被继承的。

    有的人说不能被继承,赋值运算符重载函数不是不能被派生类继承,而是被派生类的默认赋值运算符重载函数给隐藏了。

    条款45: 弄清C++在幕后为你所写、所调用的函数
    一个空类什么时候不是空类? ---- C++编译器通过它的时候。如果你没有声明下列函数,体贴的编译器会声明它自己的版本。这些函数是:一个拷贝构造函数,一个赋值运算符,一个析构函数,一对取址运算符。另外,如果你没有声明任何构造函数,它也将为你声明一个缺省构造函数。所有这些函数都是公有的。换句话说,如果你这么写:

    class Empty{};  
    和你这么写是一样的:

    class Empty {  
    public:  
      Empty();                        // 缺省构造函数  
      Empty(const Empty& rhs);        // 拷贝构造函数  
      
      ~Empty();                       // 析构函数 ---- 是否  
                                      // 为虚函数看下文说明  
      Empty&  
      operator=(const Empty& rhs);    // 赋值运算符  
      
      Empty* operator&();             // 取址运算符  
      const Empty* operator&() const;  
    };  
    所以:
    class A
    {
    public:
         A& operator=(int a);
    };
    class B:public A
    {
       //这里隐藏了一个默认提供的 B& operator=(const B& b);   将父类的那个给隐藏了
    };
    int main(int argc, char *argv[])
    {
        A a = 10;//allow
        B b = 10;//Not allow
    }
    现在说说隐藏和重写的区别:重写是对基类的virtual函数的重新定义,要求形参列表必须相同!

    而隐藏则是在子类里面有跟基类函数名字一样的函数,注意这个函数不为virtual。

    看看一个例子:

    class A
    {
    public:
        virtual int test()=0{};
    };
    class B:public A
    {
        int test(int a){return 0;};
    };
    这里用B类去实例化一个对象出错,因为B是抽象类,B类的test函数并不是对A类的重写,而是隐藏!对于父类给的virtual函数,子类必须全部实现重写,否则将会完全复制下来!上面代码其实相当于:

    class A
    {
    public:
        virtual int test()=0{};
    };
    class B:public A
    {
        virtual int test()=0{};
        int test(int a){return 0;};
    };
    而像这样:

    class A
    {
    public:
        virtual int test()=0{};
    };
    class B:public A
    {
        int test(){return 0;};//重写
        int test(int a){return 0;};//隐藏了父类的函数
    };</span>
    上述的就可以实例化B类的对象了!

    展开全文
  • 迅雷2014C++研发笔试卷C解题分析

    千次阅读 2016-08-28 14:43:04
    1、下列运算符中,在C++语言中不能重载的是: A.* B.>= C.:: D. delete 分析:在C++中,sizeof运算符,.成员运算符,.*成员指针运算符,::作用域解析运算符以及?:条件运算符能被重载,因此答案选C。 2、下面关于...

    试卷链接见迅雷2014C++研发笔试卷C

    1、下列运算符中,在C++语言中不能重载的是:

    A.*    B.>=  C.::  D. delete

    分析:在C++中,sizeof运算符,.成员运算符,.*成员指针运算符,::作用域解析运算符以及?:条件运算符不能被重载,因此答案选C。


    2、下面关于多态性的描述,错误的是:

    • C++语言的多态性分为编译时的多态性和运行时的多态性
    • 编译时的多态性可通过函数重载实现
    • 运行时的多态性可通过模板和虚函数实现
    • 实现运行时多态性的机制称为动态绑定
    分析:
    A,正确,分编译时多态和运行时多态;
    B,正确,编译时多态可以通过函数重载实现,具体表现在根据参数的个数和类型不同选择合适的同名函数;
    C,错误,运行时多态通过虚函数实现,就是运行时根据对象类型自动选择正确的调用接口。模板属于编译时多态性,因为编译时自动根据模板生成模板函数;
    D,正确,运行时多态是根据对象类型自动选择正确的调用函数,也叫动态绑定。

    3、下面关于类和对象的描述中,错误的是:
    • 类就是C语言中的结构体类型,对象就是C语言中的结构体变量
    • 类和对象之间的关系是抽象和具体的关系
    • 对象是类的实例,一个对象必须属于一个已知的类
    • 类是具有共同行为的若干对象的统一描述体
    分析:(1)C的结构体内不允许有函数存在,C++允许有内部成员函数,且允许该函数是虚函数。所以C的结构体是没有构造函数、析构函数、和this指针的。(2)C的结构体对内部成员变量的访问权限只能是public,而C++允许public 、protected、private三种。(3)C语言的结构体是不可以继承的,C++的结构体是可以从其他的结构体或者类继承过来的。以上三条都是表面的区别,实际区别就是面向过程面向对象编程思路的区别:C的结构体只是把数据变量给包裹起来了,并不涉及算法。而C++是把数据变量及对这些数据变量的相关算法给封装起来, 并且给对这些数据和类不同的访问权限。

    4、引用标准库时,下面的说法你认为哪个是正确的:
    • 语句#include “stdlib.h”是正确的,而且程序编译速度比#include <stdlib.h>要快
    • 语句#include <stdlib.h>是正确的,而且程序编译速度比#include “stdlib.h”要快语句#include <stdlib.h>和#include “stdlib.h”都是正确的,程序编译速度没有区别
    • 语句#include “stdlib.h”是错误的
    分析:#inlcude<> 首先只搜索系统目录,不会搜索本地目录.比如你自己写一个头文件,你用#include <>会出错。
    #include""首先搜索本地目录,如果本地目录没有才会搜索系统目录。可以把系统的文件放到当前目录下改成 "" 可以优先使用。综上所述,B是对的。

    5、设a、b、c、d、m、n均为int型变量,且a=5、b=6、c=7、d=8、m=2、n=2,则逻辑表达式(m=a>b)&&(n=c>d)运算后,n的值为:
    • 0
    • 1
    • 2
    • 7
    分析:逻辑与或者逻辑或的表达式,先是判断一边,若一边可以判断整个表达式为真假时,另一边不再执行。
    做题时一定要注意。对于这题来讲,m=a>b后m=0,表达式为假,&&后半部分不会操作,因此n为初始值2。

    6、不能作为重载函数的调用的依据是:
    • 参数个数
    • 参数类型
    • 函数类型
    • 函数名称
    分析:函数重载是面向对象程序设计的多态性的实现,就是指同一个函数名对应着不同的函数实现,系统可根据参数的类型、个数来自动完成调用函数的最佳匹配。因此D选项是重载函数的判断依据,而且是第一依据:函数名必须相同。重载函数的参数至少要有一方面不同,表现如下:
    (1)函数的参数类型和个数不同;
    (2)函数参数的顺序不同。如:fun(double,int)和fun(int,double)就是两个不同的函数
    注意:返回值没有区分度,因为在调用函数的时候你自己可以选择接收或丢弃返回值,编译器是无法区分你是要调用有相应返回值的函数然后丢弃返回值,还是要调用无返回值的函数。所以,返回值(函数类型)是无法区分函数的。

    7、下列程序的输出结果为:
    #include<iostream.h>
    int func(int n)
    {
       if(n<1)
           return 1;
        else
           return n+func(n-1);
        return 0;
    }
    void main() {
        cout<< func(5) <<endl;
    }
    • 0
    • 10
    • 15
    • 16
    分析:这是一个求累加和的递归,注意最后f(0)=1,因此答案为D。

    8、建立派生类对象时,3种构造函数分别是a(基类的构造函数)、b(成员对象的构造函数)、c(派生类的构造函数)这3种构造函数的调用顺序为: 
    • abc
    • acb
    • cab
    • cba
    分析:执行派生类构造函数的顺序是:
    (1)调用基类构造函数,对基类数据成员初始化;
    (2)调用子对象构造函数,对子对象数据成员初始化;
    (3)再执行派生类构造函数本身,对派生类数据成员初始化。
    答案选A。

    9、如果友元函数重载一个运算符时,其参数表中没有任何参数则说明该运算符是:
    • 一元运算符
    • 二元运算符
    • 选项A)和选项B)都可能
    • 重载错误
    分析:友元函数重载时,重载几目的运算符就有几个参数。成员函数重载时,因为有this指针的原因,所以参数个数要少一个。答案选D。

    10、
    #define F(X,Y)   (X)--, (Y)++, (X)*(Y);
    …
    int i, a = 3, b = 4;
    for( i = 0; i<5; i++)
        F(a,b) ;
    printf(“%d, %d”, a, b);</span>
    输出结果是
    • 3, 4
    • 3, 5
    • -2, 5
    • -2, 9
    分析:#define F(X,Y)   (X)--, (Y)++, (X)*(Y);  表示遇到F(X,Y)时,用(X)--, (Y)++, (X)*(Y)替换原内容,F(a,b)替换为(a)--, (b)++, (a)*(b),则每循环一次a--,b++;循环了5次,a变为-2,b变为9。故答案为D。

    11、[不定项选择题]已知一段文本有1382个字符,使用了1382个字节进行存储,这段文本全部是由a、b、c、d、e这5个字符组成,a出现了354次,b出现了483次,c出现了227次,d出现了96次,e出现了232次,对这5个字符使用哈夫曼(Huffman)算法进行编码,则以下哪些说法正确()
    • 使用哈夫曼算法编码后,用编码值来存储这段文本将花费最少的存储空间
    • 使用哈夫曼算法进行编码,a、b、c、d、e这5个字符对应的编码值是唯一确定的
    • 使用哈夫曼算法进行编码,a、b、c、d、e这5个字符对应的编码值可以有多套,但每个字符编码的位(bit)数是确定的
    • b这个字符的哈夫曼编码值位数应该最短,d这个字符的哈夫曼编码值位数应该最长
    分析:
    A正确Huffman树就是求最优解。可以有多套方案,但最终每套方案生成的编码长度都相同且都是最优解。
    B错误我们可以将左子树定为1右子树定为0也可以反之,不同的方案获得的编码值是不同的,但每个字符的编码长度是固定的。
    C正确不同的方案影响的只是通向节点的路径为0还是1,而不会影响Huffman树的层次结构
    D正确生成了Huffman树之后,我们就能看到,出现频率越高的节点越靠近根,深度越小即编码值尾数越短;出现频率越低的节点越远离根,深度越大即编码位数越长。

    12、[不定项选择题]下面描述不正确的是()
    • while循环语句的循环体至少执行1次
    • do-while循环可以写成while循环的格式
    • continue语句可以出现在各种循环体中
    • break语句不可以出现在循环体内
    分析:while(0)时不执行,break用于终止离它最近的循环语句,continue只能出现在for/while/do while循环内部,或嵌套在此类循环里的语句和块内部,不能在单独的switch中用continue。答案ACD。

    13、[不定项选择题]下面模板声明中,哪些是非法的()
    • template<class Type>class C1{};
    • template<class T, U, class V>class C2{};
    • template<class C1, typename C2>class C3{};
    • template<typename myT, class myT>class C4{};
    分析:答案BD,B选项的U参数没有指定类型, D选项的 2个形参名同名。
    函数模板的格式:

    template <class 形参名class 形参名,......返回类型 函数名(参数列表)

    {

    函数体

    }

    类模板的格式为:

    template<class   形参名 class 形参名>   class 类名

    { ... };


    14、[不定项选择题]拷贝构造函数的特点是()
    • 该函数名同类名,也是一种构造函数,该函数返回自身引用
    • 该函数只有一个参数,是对某个对象的引用
    • 每个类都必须有一个拷贝初始化构造函数,如果类中没有说明拷贝构造函数,则编译器系统会自动生成一个缺省拷贝构造函数,作为该类的保护成员
    • 拷贝初始化构造函数的作用是将一个已知对象的数据成员值拷贝给正在创建的另一个同类的对象
    分析:拷贝函数和构造函数没有返回值,A是错的。构造函数可以有多个参数,但是复制构造函数的参数必须是实例的引用,且只有一个。B是对的。C前面都是对的,但是默认复制构造函数可以在类或子类外使用,不是保护成员函数。D正确不解释。答案BD。

    15、[不定项选择题]下列对函数double add(int a , int b)进行重载,正确的是()
    • int add(int a ,int b ,int c)
    • int add(double a , double b)
    • double add(double a , double b)
    • int add(int a , int b)
    分析:override是重写(覆盖)了一个方法,以实现不同的功能。一般是用于子类在继承父类时,重写(重新实现)父类中的方法。重写(覆盖)的规则如下:
     (1)重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载.
     (2)重写方法的访问修饰符一定要大于被重写方法的访问修饰符(public>protected>default>private)。
     (3)重写的方法的返回值必须和被重写的方法的返回一致;
     (4)重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者是其子类;
     (5)被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写。
     (6)静态方法不能被重写为非静态的方法(会编译出错)。
    overload是重载,一般是用于在一个类内实现若干重载的方法,这些方法的名称相同而参数形式不同。重载的规则如下:
    (1)在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必须不一样);
    (2)不能通过访问权限、返回类型、抛出的异常进行重载;
    (3)方法的异常类型和数目不会对重载造成影响。

    16、[智力题]有一幢100层高的大楼,给你两个完全相同的玻璃围棋子。假设从某一层开始,丢下玻璃棋子就会破碎。那么怎么利用手中的两颗棋子,用一种什么样的最优策略,知道这个临界的层高呢?
    分析:参考博客100层楼和两个玻璃球的问题

    17、[编程题]用c++写一个函数,如Foo(const char *str),打印出str的全排列,如abc的全排列:abc, acb, bca, dac, cab,cba
    分析:参考博客全排列的一些总结。参考代码如下:
    #include<iostream>
    #include<string>
    #include<algorithm>
    using namespace std;
    void Foo(const char*str){
        string s=str;
        cout<<s<<endl;
        while(next_permutation(s.begin(),s.begin()+s.size())){
             cout<<s<<endl;
        }
        return ;
    }
    int main(){
        const char str[]="abc";
        Foo(str);
        return 0;
    }
    参考代码2:
    #include<iostream>
    using namespace std;
    void Foo(char *str,char *begin)
    {
       
        if(*begin == '\0') 
            cout<<str<<endl;
        else  
            for(char* p = begin; *p != '\0'; p++) 
            { 
                swap(*begin,*p);
                Foo(str, begin+1); 
                swap(*begin,*p);
            } 
    }
    int main()
    {
        char *str=new char[100];
        cin>>str;
        Foo(str,str);
        return 0;
    }

    18、[编程题]求出一字符串中最长的数字串。比如as123cdf1234f,返回1234,char* FindNumber(char * out,char *in)。
    分析:参考博客在字符串中找出连续最长的数字串

    展开全文
  • 44day---C++面试题

    2020-09-03 19:43:09
    1.设 x,y,t 均为 int 型变量,执行下列语句后,y的值为 3 ...3.不能被重载的运算符 1、. (成员访问运算符) 2、.* (成员指针访问运算符) 3、:: (域运算符) 4、sizeof(长度运算符) 5、?: (条件运算符) ...

    1.设 x,y,t 均为 int 型变量,执行下列语句后,y的值为 3

    x=y=3; 
    t=++x||++y;
    

    解:当解析器遇到了||时,只要前面的++x为真,后面的语句就不执行了
    2.单循环链表的主要优点是从表中任一结点出发都能扫描到整个链表
    3.不能被重载的运算符 1、. (成员访问运算符) 2、.* (成员指针访问运算符) 3、:: (域运算符) 4、sizeof(长度运算符) 5、?: (条件运算符)

    展开全文
  • a)创建用户自定义类型Complex,使其拥有private整形数据成员real和imaginary,并声明重载的流插入和流提取运算符函数为该类的友元。 b)定义流插入和流提取运算符函数。流提取运算符函数应该判断输入的数据是否...
  • 这个自己构造 Matrix 类型必须实现一系列操作运算符重载以及提供大量实现函数,这是一个极度复杂过程,在此不作一一论述。整个 Matrix 类型结构可以大致设计如下,此处仅作参考,不必雷同: // 数据类型...
  • C++复习资料之系列

    2008-12-30 21:35:45
    下列选项中错误的是( c )。 (a) if(x == y)i++; (b) if(x = y)i--; (c) if( xy )i--; (d) if( x+y )i++; 2.设有函数关系为y= ,下面选项中能正确表示上述关系为( c )。 (a) y = 1; (b) ...
  • 8.4.1 实现重载的运算符 373 8.4.2 实现对比较运算符的完全支持 376 8.4.3 重载赋值运算符 379 8.4.4 重载加法运算符 384 8.4.5 重载递增和递减运算符 387 8.4.6 重载函数调用操作符 388 8.5 对象复制问题 ...
  • 8.4.1 实现重载的运算符 373 8.4.2 实现对比较运算符的完全支持 376 8.4.3 重载赋值运算符 379 8.4.4 重载加法运算符 384 8.4.5 重载递增和递减运算符 387 8.4.6 重载函数调用操作符 388 8.5 对象复制问题 ...
  • JAVA面试题最全集

    2010-03-13 13:09:10
    声明为final方法也同样只能使用,不能重载 finally?再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配 catch 子句就会执行,然后控制就会进入 finally 块(如果有话)。 ...
  • Visual C++ 2005 入门经典 详细书签版

    热门讨论 2013-02-02 16:39:43
    8.4.1 实现重载的运算符 380 8.4.2 实现对运算符的完全支持 383 8.4.3 重载赋值运算符 387 8.4.4 重载加法运算符 392 8.4.5 重载递增和递减运算符 396 8.5 类模板 396 8.5.1 定义类模板 397 8.5.2 ...
  • Visual C++ 2008入门经典--详细书签版

    热门讨论 2013-02-02 16:07:15
    8.4.1 实现重载的运算符 362 8.4.2 实现对运算符的完全支持 365 8.4.3 重载赋值运算符 368 8.4.4 重载加法运算符 372 8.4.5 重载递增和递减运算符 376 8.5 类模板 377 8.5.1 定义类模板 377 8.5.2 根据类...
  • 8.4.1 实现重载的运算符 380 8.4.2 实现对运算符的完全支持 383 8.4.3 重载赋值运算符 387 8.4.4 重载加法运算符 392 8.4.5 重载递增和递减运算符 396 8.5 类模板 396 8.5.1 定义类模板 397 8.5.2 ...
  • 8.4.1 实现重载的运算符 362 8.4.2 实现对运算符的完全支持 365 8.4.3 重载赋值运算符 368 8.4.4 重载加法运算符 372 8.4.5 重载递增和递减运算符 376 8.5 类模板 377 8.5.1 定义类模板 377 8.5.2 根据类...
  • 8.构造函数能继承,也能被重载。 9.Java 源程序文件名必须和公共类类名相同。 10.双精度数强制转换成单精度数后,其数值精度会提高。 11. 队列、链表、堆栈和树都是线性数据结构。 12.属性隐藏是指子类重新...
  • 面试题2:用C++设计一个不能被继承的类 9.2 虚函数和纯虚函数 面试题3:下面说法中正确的是哪个 面试题4:写出程序的打印结果 面试题5:访问基类的私有虚函数 9.3 多态 面试题6:简述类成员函数的重写、重载和隐藏的...
  • 4. 当整型变量n值不能被13除尽时,其值为 false Java语言表达式是_____________ 。 5. 在Java语言中,所有数组都有一个lenght属性,这个属性存储了该数组__________。 6. 定义类就是定义一种抽象_________...
  • MySQL命令大全

    2018-01-15 11:19:17
    RELOAD: 重载访问控制表,刷新日志等。 SHUTDOWN: 关闭MySQL服务。 数据库/数据表/数据列权限: Alter: 修改已存在数据表(例如增加/删除列)和索引。 Create: 建立新数据库或数据表。 Delete: 删除表记录...
  • 拆箱相反,重载就是指一个方法名同,参数个数不同,返回值可以相同方法.CLR是通用语言运行时,其它不清楚. 4.列举一下你所了解XML技术及其应用 答:XML可是好东西,保存配置,站与站之间交流,WEB SERVICE都要用它. ...
  • MYSQL常用命令大全

    2011-05-30 13:31:24
    我现在用的是mysql-3.23.27-beta-win。  二、显示命令  1、显示数据库列表。  show databases;  刚开始时才两个数据库:mysql和test。mysql库很重要它里面有MYSQL的系统信息,我们改密码和新增用户,实际上...
  • 面向对象编程语言与以往各种编程语言有根本不同,它设计出发点就是为了更直接描述客观世界中存在事物以及它们之间关系。面向对象编程语言将客观事物看作具有属性和行为对象,通过抽象找出同一类...
  • 数据结构(C++)有关练习题

    热门讨论 2008-01-02 11:27:18
    2、要求的图如下,也可以自己构造图,但是需要注意的是,图不是退化的单链表: 实验报告要求: 1、 按要求记录下图的类的完整实验代码; 2、 纪录你所使用的图; 3、 按要求记录下要求的输出...

空空如也

空空如也

1 2
收藏数 22
精华内容 8
关键字:

下列运算符能被重载的是