一,判断题
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 {};
===========================================
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;
}
编程题略…