精华内容
下载资源
问答
  • c和c++做题小结

    2019-09-25 22:09:57
    1、多继承的虚基类不能够实例化。 这句话是错误的,当不调用子类时,虚基类的函数当然就不会virtual的影响,而是照常可以实例化使用。 2、在类的非静态函数中this指针指向调用该函数的对象。 这句话是正确的,...

    1、多继承的虚基类不能够实例化。

    这句话是错误的,当不调用子类时,虚基类的函数当然就不会virtual的影响,而是照常可以实例化使用。

    2、在类的非静态函数中this指针指向调用该函数的对象。

            这句话是正确的,注意非静态函数,因为多个对象的静态数据和函数都指向了同一块内存空间,不会随着新定义的对象而发生变化,所以this指针也就失去了应有的作用。

    3、关于运算符重载:

    (1)运算符重载定义:

    C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。

    运算符重载是通过创建运算符函数实现的运算符函数定义了重载的运算符将要进行的操作。运算符函数的定义与其他函数的定义类似,惟一的区别是运算符函数的函数名是由关键字operator和其后要重载的运算符符号构成的。运算符函数定义的一般格式如下:

    <返回类型说明符> operator <运算符符号>(<参数表>)
    {
         <函数体>
    }

    举例说明:

    例1:“+”重载

    #include<iostream>
    
    using namespace std;
    
    class add {
    public:
        int m_A, m_B;//为了方便看操作效果,一般设为private属性
        add() {}  //方便定义重载函数,需要自己写默认构造函数
        add(int a, int b) :m_A(a), m_B(b) {}
        add operator+(add &p) {
            add tmp;
            tmp.m_A = this->m_A + p.m_A;
            tmp.m_B = this->m_B + p.m_B;
            return tmp;
        }
    };
    
    /*add operator+(add &p1, add &p2) {
        add tmp;
        tmp.m_A = p1.m_A + p2.m_A;
        tmp.m_B = p1.m_B + p2.m_B;
        return tmp;
    }*/   //代码段2
    
    int main() {
        add p1(1,2);
        add p2(3,4);
        add p3 = p1 + p2;
        cout << p3.m_A << "   "<<p3.m_B << endl;
        system("pause");
        return 0;
    }

    在上面的程序中,使用代码段二可以起到同样的效果,类外实现。

     例2:“<<”重载

    #include <iostream>
    
    using namespace std;
    
    class person {
        friend ostream& operator<<(ostream &cout, person &p); //外部函数调用私有的属性,可以采用friend的方法
    public:
        person() {};
        person(int a, int b) :m_A(a), m_B(b) {}
    private:
        int m_A, m_B;
    };
    
    ostream& operator<<(ostream &cout,person &p) {  //cout属于ostream这个类
        cout << p.m_A <<“   ”<< p.m_B;
        return cout;
    }
    
    int main() {
        person p(1,2);
        cout << p << endl;
    
        system("pause");
        return 0;
    }

     例3:“++”前置后置重载

    #include <iostream>
    
    using namespace std;
    
    class MyInteger {
        friend ostream& operator<<(ostream& cout, MyInteger & myInt);
    private:
        int num;
    public:
        MyInteger():num(0) {}
        MyInteger& operator++() {
            this->num++;
            return *this;
        }
        MyInteger operator++(int) {
            MyInteger tmp=*this;
            num++;
            return tmp;
        }
    };
    
    ostream& operator<<(ostream& cout, MyInteger & myInt)
    {
        cout << myInt.num;
        return cout;
    }
    
    
    void test(){
        MyInteger p;
        cout << ++p << endl;
        MyInteger q=p++;
        cout << q << endl;
        cout << p << endl;
    }
    
    int main() {
        test();
    
        system("pause");
        return 0;
    }

    上面的代码输出的结果是1,1,2; 

    (2)运算符重载时要遵循以下规则:

       1) 除了类属关系运算符"."、成员指针运算符".*"、作用域运算符"::"、sizeof运算符和三目运算符"?:"以外,C++中的所有运算符都可以重载。
    2) 重载运算符限制在C++语言中已有的运算符范围内的允许重载的运算符之中,不能创建新的运算符。
    3) 运算符重载实质上是函数重载,因此编译程序对运算符重载的选择,遵循函数重载的选择原则。
    4) 重载之后的运算符不能改变运算符的优先级和结合性,也不能改变运算符操作数的个数及语法结构。
    5) 运算符重载不能改变该运算符用于内部类型对象的含义。它只能和用户自定义类型的对象一起使用,或者用于用户自定义类型的对象和内部类型的对象混合使用时。
    6) 运算符重载是针对新类型数据的实际需要对原有运算符进行的适当的改造,重载的功能应当与原有功能相类似,避免没有目的地使用重载运算符。

    4、在用类来定义数组或者指针数组时,每一个数组只会调用一次构造函数和析构函数。

    转载于:https://www.cnblogs.com/lzy820260594/p/11322505.html

    展开全文
  • 1 . 函数调用不可以()。 答 :函数调用不可以作为形参 可以作为实参 ,也可以作为表达式 ,和执行语句中 2. 下列哪种方式可以完成float a与0的比较( ) ...多继承的虚基类不能够实例化 基类的析...

    1 . 函数调用不可以()。
    答 :函数调用不可以作为形参
    可以作为实参 ,也可以作为表达式 ,和执行语句中
    2. 下列哪种方式可以完成float a与0的比较( )
    fabs(a) < 0.00001f
    3. int p=null;是正确的定义吗
    答 : 错误 应先定后赋值null;
    4. 派生类不能访问通过私有继承的基类的保护成员
    多继承的虚基类不能够实例化
    基类的析构函数和虚函数都不能够被继承,需要在派生类中重新实现
    5. 实现运行时的多态性要使用( )
    答: 虚函数;
    6. 指针函数是指函数的返回值为指针的函数.说法的是否正确?
    答 :正确
    7. 全局对象在main退出后,程序结束前析构吗?
    答:正确
    8.
    void main()
    {
    int a=5,b=0,c=0;
    if (a=b+c) printf ("
    **\n");
    else printf("$$$\n");
    }
    错误原因没有计算a的值想当然把结果当为真
    9 .
    关于结构类型下面哪一种说法是错误的?

       结构类型不可作为其成员的类型
    
       结构变量的大小就是其各成员的大小之和
    
       结构类型可以定义在函数之外
    
       结构类型可以定义在函数之中
    

    结构体变量大小大于等于 成员之和 存在数据对齐机制
    10 . 当说明一个共用体变量时系统分配给它的内存是成员中占内存最大者所需的容量。
    是最大变量的倍数个。
    11. 设置虚基类的目的是( )
    消除二义性
    12. 在c语言中,要求运算必须是整型的运算符是:%

    展开全文
  • 在面向对象编程中,继承是功能最强大特性之一,通过继承,派生类可以继承基类的特性,可重用基类 代码。本章讨论公有继承,这种继承模拟了is-a关系,即派生对象是基对象特例。例如,物理学家是科 学家特例。...
  • 在面向对象编程中,继承是功能最强大特性之一,通过继承,派生类可以继承基类的特性,可重用基类 代码。本章讨论公有继承,这种继承模拟了is-a关系,即派生对象是基对象特例。例如,物理学家是科 学家特例。...
  • 在面向对象编程中,继承是功能最强大特性之一,通过继承,派生类可以继承基类的特性,可重用基类 代码。本章讨论公有继承,这种继承模拟了is-a关系,即派生对象是基对象特例。例如,物理学家是科 学家特例。...
  • 多继承性可通过实现这样接口而获得。接口中所有方法都是抽象,没有一个有程序体。接口只可以定义static final成员变量。接口实现与子类相似,除了该实现类能从接口定义中继承行为。当类实现特殊接口时,它...
  • MFC程序框架剖析

    2015-03-05 09:53:19
    如CTestApp,它实例化theApp全局对象)来标识 9、基类构造函数中this指针指向问题 在构造子类对象时,会自动调用父类构造函数,此时在父类构造函数中this指针所指向是子类对象地址 10、AfxWinMain函数 ...
  •  8.2.3 模板的实例化  8.2.4 用模板实现通用算法  第9章 STL中容器管理数据  9.1 容器就是STL中瓶瓶罐罐  9.1.1 操作容器中数据元素  9.1.2 使用迭代器访问容器中数据元素  9.1.3 容器使用说明书 ...
  • 13.10 被继承的虚函数仍然是虚函数 223 13.11 系统是如何调用虚函数的 224 13.12 在虚函数中使用成员名限定 224 13.13 虚析构函数 225 第14章 数组 228 14.1 数组的基本用法 228 14.1.1 什么是数组 228 ...
  • 答:Class可以被实例化,属于引用类型,是分配在内存堆上,Struct属于值类型,是分配在内存栈上. [Page] 26.根据委托(delegate)知识,请完成以下用户控件中代码片段填写: namespace test { public ...
  • java 面试题 总结

    2009-09-16 08:45:34
    多继承性可通过实现这样接口而获得。接口中所有方法都是抽象,没有一个有程序体。接口只可以定义static final成员变量。接口实现与子类相似,除了该实现类能从接口定义中继承行为。当类实现特殊接口时,它...
  • 在一小时内学会 C#(txt版本)

    热门讨论 2009-08-19 18:09:37
    所有 C# 的类型都是从 object 类继承的。有两种数据类型: 1. 基本/内建类型 2. 用户定义类型 以下是 C# 内建类型的列表: 类型 字节 描述 byte 1 unsigned byte sbyte 1 signed byte short 2 signed short ...
  • 2.9.3 C++/CLI特有功能——格式输出 92 2.9.4 C++/CLI键盘输入 94 2.9.5 使用safe_cast 95 2.9.6 C++/CLI枚举 96 2.10 小结 98 2.11 练习题 100 第3章 判断和循环 101 3.1 比较数据值 101 ...
  • Visual C++ 2005 入门经典 详细书签版

    热门讨论 2013-02-02 16:39:43
    2.9.3 C++/CLI特有功能——格式输出 92 2.9.4 C++/CLI键盘输入 94 2.9.5 使用safe_cast 95 2.9.6 C++/CLI枚举 96 2.10 小结 98 2.11 练习题 100 第3章 判断和循环 101 3.1 比较数据值 101 ...
  • 4.2 继承的类型 4.2.1 实现继承和接口继承 4.2.2 多重继承 4.2.3 结构和类 4.3 实现继承 4.3.1 方法 4.3.2 隐藏方法 4.3.3 调用函数的基类版本 4.3.4 抽象类和抽象函数 4.3.5 密封类和密封方法 4.3.6 派生类的...
  • 4.2 继承的类型 4.2.1 实现继承和接口继承 4.2.2 多重继承 4.2.3 结构和类 4.3 实现继承 4.3.1 方法 4.3.2 隐藏方法 4.3.3 调用函数的基类版本 4.3.4 抽象类和抽象函数 4.3.5 密封类和密封方法 4.3.6 派生类的...
  • 4.2 继承的类型 4.2.1 实现继承和接口继承 4.2.2 多重继承 4.2.3 结构和类 4.3 实现继承 4.3.1 方法 4.3.2 隐藏方法 4.3.3 调用函数的基类版本 4.3.4 抽象类和抽象函数 4.3.5 密封类和密封方法 4.3.6 派生类的...
  • 13.2.2 模板实例化 295 13.2.3 模板参数 296 13.2.4 类型等价 296 13.2.5 类型检查 297 13.3 函数模板 298 13.3.1 函数模板参数 299 13.3.2 函数模板重载 300 13.4 用模板参数描述策略 302 13.4.1 默认...
  • 13.2.2 模板实例化 295 13.2.3 模板参数 296 13.2.4 类型等价 296 13.2.5 类型检查 297 13.3 函数模板 298 13.3.1 函数模板参数 299 13.3.2 函数模板重载 300 13.4 用模板参数描述策略 302 13.4.1 默认...
  • C++程序设计语言(特别版)--源代码

    热门讨论 2012-04-23 07:33:51
    13.2.2 模板实例化 295 13.2.3 模板参数 296 13.2.4 类型等价 296 13.2.5 类型检查 297 13.3 函数模板 298 13.3.1 函数模板参数 299 13.3.2 函数模板重载 300 13.4 用模板参数描述策略 302 13.4.1 默认...
  • 2.13.3 C++/CLI特有功能—— 格式输出 88 2.13.4 C++/CLI键盘输入 91 2.13.5 使用safe_cast 92 2.13.6 C++/CLI枚举 92 2.14 查看C++/CLI类型 96 2.15 小结 97 2.16 练习 97 2.17 本章主要内容 98 第3...
  • 2.13.3 C++/CLI特有功能—— 格式输出 88 2.13.4 C++/CLI键盘输入 91 2.13.5 使用safe_cast 92 2.13.6 C++/CLI枚举 92 2.14 查看C++/CLI类型 96 2.15 小结 97 2.16 练习 97 2.17 本章主要内容 98 第3...
  • IvorHorton还著有关于C、C++和Java的多部入门级好书,如《C语言入门经典(第4版)》和《C++入门经典(第3版)》。 目录 封面 -19 前言 -18 目录 -10 第1章 使用Visual C++ 2008编程 1 1.1 .NET Framework 1 1.2 CLR 2...
  • Visual C++ 2008入门经典--详细书签版

    热门讨论 2013-02-02 16:07:15
    CruiseYoung提供带有详细书签电子书籍目录 ... 特别说明:该版本是目前网络上最全版本:修正了268-367页缺页问题。 Visual C++ 2008入门经典 ...第9章 类继承函数 436 9.1 面向对象编程基本思想 436 9.2 ...
  • c++ 面试题 总结

    2009-09-16 08:44:40
    代码位置必须在物理内存中才能被运行,由于现在操作系统中有非常多的程序运行着,内存中不能够完全放下,所以引出了虚拟内存概念。把哪些不常用程序片断就放入虚拟内存,当需要用到它时候在load入主存...

空空如也

空空如也

1 2
收藏数 26
精华内容 10
关键字:

多继承的虚基类不能够实例化