📜  C++关于虚函数和抽象类的面试题

📅  最后修改于: 2021-10-23 07:36:09             🧑  作者: Mango

1.什么是纯虚函数?

答。 C++中的纯虚函数(或抽象函数)是我们没有实现的虚函数,我们只声明它。纯虚函数是通过在声明中赋值 0 来声明的。请参阅以下示例。

// An abstract class
class Test {
    // Data members of class
public:
    // Pure Virtual Function
    virtual void show() = 0;
  
    /* Other members */
};

2. 什么是抽象类?
答。包含至少一个纯虚函数的类称为抽象类。看下面的例子

// An abstract class
class Test {
    // Data members of class
public:
    // Pure Virtual Function
    virtual void show() = 0;
  
    /* Other members */
};

在上面的例子中,Test 是一个抽象类,因为它有一个纯虚函数。

关于抽象类的一些有趣的事实
1)我们不能创建抽象类的对象。

// pure virtual functions make a class abstract
#include 
using namespace std;
  
class Test {
    int x;
  
public:
    virtual void show() = 0;
    int getX() { return x; }
};
  
int main(void)
{
    Test t;
    return 0;
}

输出 :

Compiler Error: cannot declare variable 't' to be of abstract
 type 'Test' because the following virtual functions are pure 
within 'Test': note:     virtual void Test::show() 

2.我们可以有抽象类类型的指针和引用。
例如下面的程序工作正常。

#include 
using namespace std;
  
class Base {
public:
    virtual void show() = 0;
};
  
class Derived : public Base {
public:
    void show() { cout << "In Derived \n"; }
};
  
int main(void)
{
    Base* bp = new Derived();
    bp->show();
    return 0;
}

输出:

In Derived 

3、如果我们不重写派生类中的纯虚函数,那么派生类也成为抽象类。
以下示例演示了相同的内容。

#include 
using namespace std;
class Base {
public:
    virtual void show() = 0;
};
  
class Derived : public Base {
};
  
int main(void)
{
    Derived d;
    return 0;
}

输出:

Compiler Error: cannot declare variable 'd' to be of abstract type 
'Derived'  because the following virtual functions are pure within
'Derived': virtual void Base::show() 

3.这个程序的输出是什么?

#include 
using namespace std;
class Test {
protected:
    int width, height;
  
public:
    void set_values(int a, int b)
    {
        width = a;
        height = b;
    }
    virtual int area(void) = 0;
};
class r : public Test {
public:
    int area(void)
    {
        return (width * height);
    }
};
class t : public Test {
public:
    int area(void)
    {
        return (width * height / 2);
    }
};
int main()
{
    r rect;
    t trgl;
    Test* ppoly1 = ▭
    Test* ppoly2 = &trgl;
    ppoly1->set_values(4, 5);
    ppoly2->set_values(4, 5);
    cout << ppoly1->area();
    cout << ppoly2->area();
    return 0;
}

输出:

2010

说明:在这个程序中,我们正在计算矩形的面积和
三角形通过使用抽象类。

4.这个程序的输出是什么?

#include 
using namespace std;
class Base {
public:
    virtual void print() const = 0;
};
class DerivedOne : virtual public Base {
public:
    void print() const
    {
        cout << "1";
    }
};
class DerivedTwo : virtual public Base {
public:
    void print() const
    {
        cout << "2";
    }
};
class Multiple : public DerivedOne, DerivedTwo {
public:
    void print() const
    {
        DerivedTwo::print();
    }
};
int main()
{
    Multiple both;
    DerivedOne one;
    DerivedTwo two;
    Base* array[3];
    array[0] = &both;
    array[1] = &one;
    array[2] = &two;
    for (int i = 0; i < 3; i++)
        array[i]->print();
    return 0;
}

输出

212

说明:在这个程序中,我们根据数组中给出的条件执行这些。所以它打印为212。

5.这个程序的输出是什么?

#include 
using namespace std;
class sample {
public:
    virtual void example() = 0;
};
class Ex1 : public sample {
public:
    void example()
    {
        cout << "GeeksForGeeks";
    }
};
class Ex2 : public sample {
public:
    void example()
    {
        cout << " is awesome";
    }
};
int main()
{
    sample* arra[2];
    Ex1 e1;
    Ex2 e2;
    arra[0] = &e1;
    arra[1] = &e2;
    arra[0]->example();
    arra[1]->example();
}

输出:

GeeksForGeeks is awesome

说明:在这个程序中,我们将来自两个类的两条语句组合起来,并使用抽象类打印出来。

想要从精选的视频和练习题中学习,请查看C++ 基础课程,从基础到高级 C++ 和C++ STL 课程,了解基础加 STL。要完成从学习语言到 DS Algo 等的准备工作,请参阅完整的面试准备课程