杭电c++期末卷

一,判断题

1、友元函数用于允许一个函数访问不相关的私有部分。
2、构造函数可以被继承。
3、动态绑定的多态性是通过虚函数实现的。
4、在c++中,传引用等同于传地址调用。
5、重载函数必须有不同的参数列表。
6、可以用delete释放不是new运算符分配的内存。
7、类成员的默认访问方式是private。
8、在类Time中析构函数可以声明为:void~Time(int);
9、const对象必须初始化。
10、在c++中,只能重载已有的运算符。

·

·

·
答案:
1、√
理解一下友元函数的性质就知道了。
2、×
构造函数是不可以被继承的。
3、√
虚函数对于多态具有决定性的作用,有虚函数才能构成多态。
4、×
传引用不能等同于传地址,在函数调用时,传地址是把一个地址传给一个指针。
5、√
如果同一作用域内的几个函数名字相同但形参列表不同,我们称之为函数重载(overload)。
6、X
在c++中,运算符new分配的动态内存空间,只能由delete删除释放,同理delete只能删除释放new分配的内存空间。
7、√
用class定义,它的成员变量值只能在其内部访问,也就是默认访问权限是private。
8、×
析构函数只能有一个,并且是无参数的。
9、√
const定义的变量值不能够被改变,因此必须要初始化。
10、√
不存在的运算符咋重载。

二、选择题

1、关键字_____说明对象或变量初始化后不会被修改。
答案:const
2、如果调用带有默认参数的函数时缺少一个参数,则_____参数就作为这个参数。
答案:最后一个参数
3、成员函数可以声明为静态的,条件是它不访问_____类的成员。
答案:非静态类
4、内敛函数执行起来比标准函数_______。
答案:更快
5、默认参数的值是由_________提供。
答案:该函数和调用程序
6、在c++中,混合类型表达式________。
答案:是允许存在的
7、表达式long(intVar)也可以表示为_____。
答案:(long)intVar
8、静态数据成员的生存期_______ 。
答案: 与整个程序相同。
9、要让一个类中的所有对象具有共同的数据,请使用______。答案:静态数据成员。
10、设置虚基类的目的是:
答案:消除二义性

三、指出下列程序片段的错误标号,写出正确的语句或解释错在何处。

1、

1) int index=675;
2)const int *ptr=&index;
3) int *const ntptr=&index;
4) *ptr=555;
5) *ntptr=666;
6) int another=8;
7) ptr=&another;
8) ntptr=&anther;

解析:2)const int *ptr 是指这个指针指向的是常量对象。指向的值类型必须是const int ××;
3)int *const ntptr 是一个常量指针,它只能指向一个对象,就不能把其他的变量赋值给它。
4)错误,我们只能读取*ptr的值,但是不可以赋值给它。
8)*ntptr是常量指针,不能指向别的变量。

2、

int app;
app=new int[15];
delete app;

int app应该改为 int* app;
delete app 应该改为: delete[] app;

3、

下面程序为什么会编译错误,并改改正错误(提出解决办法)

class window   //有错误的代码
{
protected:
    int basedata;
};

class border: public window {};   //公有继承

class menu: public window {};    //公有继承

class border_and_menu: public border,public menu
{
public:
    int show()
    {
        return basedata;  //报错
    }
};

上述代码报错的原因分析: basedata重名,会产生二义性,应该使用虚基类,代码修改为:
class border:virtual public window {};
class menu:virtual public window {};

扫描二维码关注公众号,回复: 11368217 查看本文章

===========================================

template<T>   //第一处
void print(T *a)
{
    cout<<a<<"\n";
}
int main()
{
  const int x=0;
  cout<<y<<"\n";  //第二处
  int y;
  x=5;
  int* p;
  p=&y;
  print(p); 
   return 0;
}

1.第一处改为:template< typename T>
2. 第二处:在没定义y之前就cout<<y<<"\n"; 错误
===================================

4、写出下面代码的结果。

#include <iostream>
using namespace std;

class A
{
   friend double count(A&);   //声明友元函数
public :
   A(double t,double r):total(t),rate(r) {}
private:
   double total;
   double rate;
};

double count(A& a)
{
   a.total+=a.rate*a.total;
   return a.total;
}

int main()
{
   A x(80,0.5),y(100,0.2);
   cout<<count(x)<<" "<<count(y)<<"\n";
   cout<<count(x)<<"\n";
   return 0;
}

运行结果如下:
120,120
180
==================================

#include <iostream>
using namespace std;
class Count
{
private:
    static int counter;
    int obj_id;
public:
    Count();  //constructor
    static void display_total(); //static function
    void display();
    ~Count(); //destructor
};

int Count::counter;  //definition of static data member
Count::Count()
{
    counter++;
    obj_id=counter;
}

Count::~Count()
{
    counter--;
    cout<<"Object number "<<obj_id<<" being destroy\n";
}

void Count::display_total() //static function
{
    cout<<"Number of objects created is ="<<counter<<endl;
}

void Count::display()
{
    cout<<"Object ID is "<<obj_id<<endl;
}
int main()
{
   Count a1;
   Count::display_total();
   Count a2,a3,a4;
   Count::display_total();
   a2.display();
   a3.display();
   return 0;
}

运行的结果如下:
在这里插入图片描述

=========================================

#include <iostream>
using namespace std;

class BASE
{
    char c;
public:
    BASE(char n):c(n){}
    virtual~BASE()    //虚构函数 避免重名
    {
        cout<<c;
    }
};

class Derived:public BASE
{
    char c;
public:
    Derived(char n):BASE(n+1),c(n){}~Derived()
    {
        cout<<c;
    }
};

int main()
{
    Derived('X');
   return 0;
}

运行的结果如下:
XY

5.程序填空

#include <cstring>
using namespace std;
class A
{
public:    //挖了一个空
    char name[80];
public:
    A(char *n)
    {
        strcpy(n,name); //第二个空
    };
};

class B:public A  //继承 第三个空
{
public:
    B(const char* n1):A(name) //父类的参数 第四个空
    {}
    void PrintName()
    {
        cout<<"name:"<<name<<endl;
    }
};
int main()
{
  B b1(" ");
  b1.PrintName();
   return 0;
}

编程题略…

猜你喜欢

转载自blog.csdn.net/qq_45687780/article/details/105961482