(二)构造函数、析构函数、静态成员、友元
作者:互联网
1-4 C++程序中,一个类的析构函数可以被重载。
1-5析构函数的作用主要是释放对象占用的资源。
1-8如果不希望某个对象的值被改变,则定义该对象的时候可以在前面加上const关键字。
1-9在类的成员函数说明后可以加const关键字,则该成员函数成为常成员函数。
1-10常量对象可以使用常量成员函数。
1-11在定义常量成员函数和声明常量成员函数时都应该使用const关键字。
1-12当用一个对象去初始化同类的另一个对象时,要调用拷贝构造函数。
1-13对象间赋值将调用拷贝构造函数。
1-14对象数组生命期结束时,对象数组的每个元素的析构函数并不会都被调用。
1-15若new一个对象数组,那么用delete释放时应该写[],否则只delete一个对象(调用一次析构函数)。
1-16当一个对象调用其成员函数时,编译器先将该对象的地址赋给 this 指针,然后调用成员函数,这样成员函数对对象的数据成员进行操作时,就隐含使用了 this 指针。
1-17静态成员用以解决同一个类的不同对象之间成员,包括数据成员和函数成员的共享问题。
1-18静态成员的特点是不管这个类创建了多少个对象,其静态成员在内存中只保留一份副本,这个副本为该类的所有对象共享,或者说静态成员为类所有。
1-21静态数据成员不能在类中初始化,使用时需要在类体外声明。
1-22静态成员变量的访问控制权限没有意义,静态成员变量均作为公有成员使用。
1-23对象数组的元素可以是不同类的对象。 F
1-24在生成对象数组时,将针对每个数组元素按其下标的排列顺序依次调用一次构造函数,调用的次数等于数组元素的个数。
1-25在定义对象数组时,可以直接进行初始化,也可以通过赋值语句实现赋值。
1-26如果只定义对象数组不进行初始化,此时调用的是有参构造函数。
1-27程序执行结束前,调用析构函数将数组中各个对象元素释放,释放顺序与创建对象的顺序相反。
1-28 point (*p)[3];point是类名,p为对象指针数组。
1-29 point *p[3];point是类名,p为定义指向对象数组的指针 。
1-30对静态数据成员初始化可以在类内进行。
1-31静态数据成员不属于某个对象,在给对象分配存储空间时,不包括静态数据成员所占的空间。
1-32静态成员函数属于类而不是类的对象,没有this指针,静态成员函数中不能使用this指针。
1-34由于静态成员函数不属于某个特定的对象,因此。不能像一般的成员函数那样随意的访问对象中的非静态数据成员。只能引用类中声明的静态数据成员。如果要引用非静态数据成员,可通过对象引用。
1-35常数据成员的值必须初始化,且不能改变。
1-36在类中声明常数据成员时,只能通过构造函数成员初始化列表的方式来实现。
1-37常成员函数既可以被常对象调用,也可以被非常对象调用。
1-39每个对象都有一个指向自身的指针,称为 this 指针,通过使用它来确定其自身的地址。
1-40当一个类对象的成员函数被调用时,该成员函数的 this指针指向调用它的对象。
int main()
{ class A { int v; }; A a; a.v = 3; return 0; }
int main() { class A { public:int v;A *p; }; A a; a.p=&a; return 0; }
int main() { class A { public:int v; }; A *p=new A; p->v=4; delete p; return 0; }
int main() { class A { public:int v; A *p; }; A a; a.p=new A; delete a.p; return 0; }
2-2下面对静态数据成员的描述中,正确的是()。
2-3对于常数据成员,下面描述正确的是(常数据成员必须被初始化,并且不能更新 )。
2-4在下面有关静态成员函数的描述中,正确的是()。
2-5下列选项中,静态成员函数不能直接访问的是()。
2-6对于常成员函数,下面描述正确的是()
2-7已知print()函数是一个类的常成员函数,它无返回值,下列表示中正确的是()。
2-9在 C++ 中,实现封装性需借助于 ▁▁▁▁▁。
2-10下列关于this指针的叙述中,正确的是( )
2-11构造函数可以重载,析构函数不能重载
2-12假定MyClass为一个类,则该类的复制构造函数的声明语句为()
2-13假定MyClass为一个类,则执行MyClass a,b(3),*p;语句时,自动调用该类构造函数()次。
2-14下面对静态数据成员的描述中,正确的是( )
类的不同对象有不同的静态数据成员值
静态数据成员不能通过类的对象调用
答案正确:1 分2-15 分数 1 作者 董卫萍 单位 绍兴文理学院元培学院
假设A 是一个类的名字,下面哪段程序不会调用A的复制构造函数?
A a1,a2; a1 = a2;
void func( A a) { cout << "good" << endl; }
A func( ) { A tmp; return tmp; }
A a1; A a2(a1);
答案正确:1 分2-16 分数 1 作者 黄淑伟 单位 沈阳师范大学
关于类的析构函数描述正确的是。
析构函数可以有参数
析构函数可以重载
析构函数可以省略
析构函数有返回值类型
答案正确:1 分2-17 分数 1 作者 黄淑伟 单位 沈阳师范大学
关于常成员的描述中,哪个是错误的?
常成员是用关键字const说明的
常成员有常数据成员和常成员函数两种
常数据成员的初始化是在类体内定义它时进行的
常数据成员的值是不可以改变的
答案正确:1 分2-18 分数 1 作者 黄淑伟 单位 沈阳师范大学
关于运算符delete的描述中,错误的是( ).
使用该运算符可以释放用new运算符创建的对象或对象数组
使用该运算符可以释放所有对象
使用delete运算符时会自动调用析构函数
用它释放对象数组时,它作用的指针名前要加运算符[ ]
答案正确:1 分2-19 分数 1 作者 黄淑伟 单位 沈阳师范大学
如果某函数的返回值是个对象 ,则该函数被调用时,返回的对象?
是通过拷贝构造函数初始化的
是通过无参数的构造函数初始化的
用哪个构造函数初始化,取决于函数中return 语句是怎么写的
不需要初始化
答案正确:1 分2-20 分数 1 作者 黄淑伟 单位 沈阳师范大学
以下说法正确的是?
在静态成员函数中可以调用同类的其他任何成员函数
const成员函数不能作用于非 const 对象
在静态成员函数中不能使用 this 指针
静态成员变量每个对象有各自的一份
答案正确:1 分2-21 分数 1 作者 黄淑伟 单位 沈阳师范大学
以下对类A的定义,哪个是正确的?
class A{ private:int v; public:void fun(){} }
class A{ int v; A * next; void fun(){} };
class A{ int v; public: void fun(); }; A::void fun(){}
class A{ int v; public: A next; void fun(){} };
2-22 分数 1 作者 黄淑伟 单位 沈阳师范大学
在类体内说明友元使用的关键字是?
virtual
friend
inline
static
答案正确:1 分2-23 分数 1 作者 黄淑伟 单位 沈阳师范大学
有如下类的定义:
class Sample
{
public:
Sample( );
Sample(int x );
......
};
动态申请对象存储单元,调用一个带参构造函数,初值为2的语句是()。
Sample *a=new Sample(2);
Sample a=new Sample(2);
Sample *a=new Sample[2];
Sample a=new Sample[2];
答案错误:0 分2-24 分数 1 作者 黄淑伟 单位 沈阳师范大学
有如下定义:
class Sample
{
public:
Sample( );
Sample(int x );
......
};
如果用new创建对象数组,该数组中包含10个对象,则正确的语句为()。
Sample *a=new Sample[10];
Sample *a=new Sample(10);
Sample *a=new Sample[ ];
Sample *a=new Sample;
答案正确:1 分2-25 分数 1 作者 何振峰 单位 福州大学
下列对重载函数的描述中,( )是错误的。
重载函数中不允许使用默认参数
重载函数中编译根据参数表进行选择
不要使用重载函数来描述毫无相干的函数
构造函数重载将会给初始化带来多种方式
答案正确:1 分2-26 分数 1 作者 余春艳 单位 浙江大学
在下面类声明中,关于生成对象不正确的是( )。
class point
{ public:
int x;
int y;
point(int a,int b) {x=a;y=b;}
};
point p(10,2);
point *p=new point(1,2);
point *p=new point[2];
point *p[2]={new point(1,2), new point(3,4)};
答案正确:1 分2-27 分数 1 作者 何振峰 单位 福州大学
设A为自定义类,现有普通函数int fun(A& x)。则在该函数被调用]时:
将执行复制构造函数来初始化形参x
仅在实参为常量时,才会执行复制构造函数以初始化形参x
无需初始化形参x
仅在该函数为A类的友元函数时,无需初始化形参x
答案正确:1 分2-28 分数 1 作者 何振峰 单位 福州大学
以下哪一个不是正确的成员访问属性。
protected
private
hidden
public
答案正确:1 分2-29 分数 1 作者 何振峰 单位 福州大学
所有类都应该有:
构造函数
析构函数
构造函数和析构函数
以上答案都不对
答案正确:1 分2-30 分数 1 作者 何振峰 单位 福州大学
对于以下关于友元的说法
如果函数fun被声明为类A的友元函数,则该函数成为A的成员函数
如果函数fun被声明为类A的友元函数,则该函数能访问A的保护成员,但不能访问私有成员
如果函数fun被声明为类A的友元函数,则fun的形参类型不能是A。
以上答案都不对
答案正确:1 分2-31 分数 1 作者 何振峰 单位 福州大学
对于类之间的友元关系:
如果类A是类B的友元,则B的成员函数可以访问A的私有成员
如果类A是类B的友元,则B也是A的友元。
如果类A是类B的友元,并且类B是类C的友元,则类A也是类C的友元。
以上答案都不对。
答案正确:1 分2-32 分数 1 作者 何振峰 单位 福州大学
给定以下类声明,哪个成员函数可能改变成员变量data?
class A {
public:
void f1 (int d);
void f2 (const int &d);
void f3 (int d) const;
private:
int data;
};
f1
f2
f3
f1和f2
答案错误:0 分2-33 分数 1 作者 张德慧 单位 西安邮电大学
在面向对象的软件系统中,不同类对象之间的通信的一种构造称为_______。
属性
封装
类
消息
答案正确:1 分2-34 分数 1 作者 张德慧 单位 西安邮电大学
在面向对象系统中,对象的属性是________。
对象的行为特性
和其他对象相关联的方式
和其他对象相互区分的特性
与其他对象交互的方式
答案正确:1 分2-35 分数 1 作者 陈晓梅 单位 广东外语外贸大学
假定AA为一个类,a()为该类公有的函数成员,x为该类的一个对象,则访问x对象中函数成员a()的格式为()
x.a
x.a()
x->a()
(*x).a()
答案正确:1 分2-36 分数 1 作者 李廷元 单位 中国民用航空飞行学院
某类中有一个无参且无返回值的常成员函数 Show,则正确的 Show 函数原型是
const void Show();
void const Show();
void Show() const;
void Show(const);
答案正确:1 分2-37 分数 1 作者 李廷元 单位 浙江大学
下面程序的输出结果是
#include <iostream>
using namespace std;
class MyClass {
public:
MyClass() {
++count;
}
~MyClass() {
--count;
}
static int getCount() {
return count;
}
private:
static int count;
};
int MyClass::count = 0;
int main() {
MyClass obj;
cout << obj.getCount();
MyClass obj2;
cout << MyClass::getCount();
cout << obj2.getCount();
return 0;
}
121
232
221
122
答案正确:1 分2-38 分数 1 作者 李廷元 单位 中国民用航空飞行学院
下面关于成员函数和常成员函数的程序,其主函数中错误的语句是
#include<iostream>
using namespace std;
class MyClass {
public:
MyClass(int x): val(x) {}
void Set(int x) {val = x;}
void Print()const {cout << "val=" << val << '\t';}
private:
int val;
};
int main() {
const MyClass obj1(10);
MyClass obj2(20);
obj1.Print(); //语句 1
obj2.Print(); //语句 2
obj1.Set(20); //语句 3
obj2.Set(30); //语句 4
return 0;
}
语句 1
语句 2
语句 3
语句 4
答案正确:1 分2-39 分数 1 作者 王秀 单位 福州大学
以下说法正确的是()。
每个对象内部都有成员函数的实现代码
一个类的私有成员函数内部不能访问本类的私有成员函数
类的成员函数之间可以相互调用
编写一个类时,至少要写一个成员函数
答案正确:1 分2-40 分数 1 作者 黄万丽 单位 曲阜师范大学
现有类的定义如下:
class MyClass {
public:
MyClass(int x): val(x) {}
void Print() const {cout << "const:val=" << val << '\t';}
void Print() {cout << "val=" << val << '\t';}
private:
int val;
};
在main函数中定义该类的l两个对象:const MyClass obj1(10); MyClass obj2(20);
依次执行obj1.Print(); obj2.Print();的输出结果是()。
val=10 const:val=20
const:val=10 const:val=20
const:val=10 val=20
val=10 val=20
答案正确:1 分2-41 分数 1 作者 陈晓梅 单位 广东外语外贸大学
关于成员函数特征的描述中,( )是错误的。
成员函数可以重载
成员函数一定是内联函数
一个类可以没有成员函数
成员函数可以设置参数的默认值
答案正确:1 分2-42 分数 1 作者 陈晓梅 单位 广东外语外贸大学
设类AA已定义,假设以下语句全部合法,哪些语句会触发调用拷贝构造函数( )。
AA a, b; //1
AA c(10, 20); //2
AA d(c); //3
AA e = d; //4
2
3
4
3 和 4
答案正确:1 分2-43 分数 1 作者 范鹏程 单位 内蒙古师范大学
对类的构造函数和析构函数描述正确的是
构造函数可以重载,析构函数不能重载
构造函数不能重载,析构函数可以重载
构造函数可以重载,析构函数也可以重载
构造函数不能重载,析构函数也不能重载
答案正确:1 分2-44 分数 1 作者 范鹏程 单位 内蒙古师范大学
类的析构函数是在什么时候调用的?
类创建时
创建对象时
删除对象时
不自动调用
答案正确:1 分2-45 分数 1 作者 范鹏程 单位 内蒙古师范大学
下列关于构造函数说法不正确的是
构造函数必须与类同名
构造函数可以省略不写
构造函数必须有返回值
在构造函数中可以对类中的成员进行初始化
答案正确:1 分2-46 分数 1 作者 范鹏程 单位 内蒙古师范大学
C++函数的声明和定义可以分开。函数声明不需要( )。
返回类型
函数名
参数表
函数体
答案正确:1 分2-47 分数 1 作者 范鹏程 单位 内蒙古师范大学
不能作为函数重载判断依据的是( )
返回类型
const
参数个数
参数类型
答案正确:1 分2-48 分数 1 作者 范鹏程 单位 内蒙古师范大学
下面关于new运算符的描述中错误的是( )
使用new创建对象时必须定义初始值
使用new创建对象时会调用类的构造函数
new可以用来动态创建对象和对象数组
使用new创建的对象可以使用delete删除
答案正确:1 分2-49 分数 1 作者 范鹏程 单位 内蒙古师范大学
不属于类的成员函数的是( ) 。
构造函数
析构函数
友元函数
复制构造函数
答案正确:1 分2-50 分数 1 作者 范鹏程 单位 内蒙古师范大学
对于C++结构体中定义的成员,其隐含的访问权限为( )
public
protected
private
static
答案正确:1 分2-51 分数 1 作者 范鹏程 单位 内蒙古师范大学
为类提供对外接口的是( )
公有成员函数
私有成员函数
保护成员函数
友元函数
答案正确:1 分2-52 分数 1 作者 范鹏程 单位 内蒙古师范大学
若类A的构造函数定义为
A(int aa=1, int bb=0) { a = aa; b = bb; }
则执行:A x(4);后,x.a和x.b的值分别是( )
1,0
1,4
4,0
4,1
答案正确:1 分2-53 分数 1 作者 范鹏程 单位 内蒙古师范大学
已知类A中的一个成员函数说明为void fun(A &a);,则A &a的含义是( )
将a的地址值赋给变量fun
指向类A的指针为a
a是类A的对象引用,用来做函数fun()的形参
变量A与a按位相与运算后作为函数fun()的参数
答案正确:1 分2-54 分数 1 作者 董俊 单位 燕山大学
下列哪一种情况下,类的复制构造函数不会被调用
用类的一个对象赋值给另一个对象时
当用类的一个对象去初始化该类的另一个对象时
如果函数的形参是类的对象,调动函数时,进行形参和实参结合时
如果函数的返回值是类的对象,函数执行完成返回调用者时
答案正确:1 分2-55 分数 1 作者 黄淑伟 单位 沈阳师范大学
以下关于友元的说法哪个是不正确的?
一个类的友元函数可以访问类对象的私有成员
友元类关系是相互的,即若类A是类B 的友元,类B也是类A的友元
在一个类中可以将另一个类的成员函数声明为友元
类之间的友元关系不能传递
答案正确:1 分2-56 分数 1 作者 文冬 单位 燕山大学
下面对静态数据成员的描述中,正确的是
静态数据成员可以在类体内进行初始化
静态数据成员不可以被类的对象调用
静态数据成员不能受private控制符的作用
静态数据成员可以直接用类名调用
标签:友元,函数,对象,成员,正确,int,析构,构造函数 来源: https://www.cnblogs.com/xinhua23/p/16401289.html