ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

(二)构造函数、析构函数、静态成员、友元

2022-06-27 12:31:37  阅读:142  来源: 互联网

标签:友元 函数 对象 成员 正确 int 析构 构造函数


1-3   C++程序中,一个类的构造函数可以被重载。
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指针指向调用它的对象。     2-1以下程序段,哪个是不正确的?
2-2下面对静态数据成员的描述中,正确的是()。
2-3对于常数据成员,下面描述正确的是(常数据成员必须被初始化,并且不能更新 )。
2-4在下面有关静态成员函数的描述中,正确的是()。 在静态成员函数中可以使用this指针
2-5下列选项中,静态成员函数不能直接访问的是()。 非静态数据成员
2-6对于常成员函数,下面描述正确的是() 常成员函数只能修改常对象的数据成员
2-7已知print()函数是一个类的常成员函数,它无返回值,下列表示中正确的是()。 void print(const);
2-9在 C++ 中,实现封装性需借助于 ▁▁▁▁▁。 函数
2-10下列关于this指针的叙述中,正确的是( ) 类非静态成员函数才有this指针
2-11构造函数可以重载,析构函数不能重载
2-12假定MyClass为一个类,则该类的复制构造函数的声明语句为() MyClass(MyClass *x)
2-13假定MyClass为一个类,则执行MyClass a,b(3),*p;语句时,自动调用该类构造函数()次。 3 D.4
2-14下面对静态数据成员的描述中,正确的是( ) B.类的每个对象都有自己的静态数据成员 C.

类的不同对象有不同的静态数据成员值

D.

静态数据成员不能通过类的对象调用

  答案正确:1 分
2-15 分数 1 作者 董卫萍 单位 绍兴文理学院元培学院

假设A 是一个类的名字,下面哪段程序不会调用A的复制构造函数?

A.

A a1,a2; a1 = a2;

B.

void func( A a) { cout << "good" << endl; }

C.

A func( ) { A tmp; return tmp; }

D.

A a1; A a2(a1);

  答案正确:1 分
2-16 分数 1 作者 黄淑伟 单位 沈阳师范大学

关于类的析构函数描述正确的是。

A.

析构函数可以有参数

B.

析构函数可以重载

C.

析构函数可以省略

D.

析构函数有返回值类型

  答案正确:1 分
2-17 分数 1 作者 黄淑伟 单位 沈阳师范大学

关于常成员的描述中,哪个是错误的?

A.

常成员是用关键字const说明的

B.

常成员有常数据成员和常成员函数两种

C.

常数据成员的初始化是在类体内定义它时进行的

D.

常数据成员的值是不可以改变的

  答案正确:1 分
2-18 分数 1 作者 黄淑伟 单位 沈阳师范大学

关于运算符delete的描述中,错误的是( ).

A.

使用该运算符可以释放用new运算符创建的对象或对象数组

B.

使用该运算符可以释放所有对象

C.

使用delete运算符时会自动调用析构函数

D.

用它释放对象数组时,它作用的指针名前要加运算符[ ]

  答案正确:1 分
2-19 分数 1 作者 黄淑伟 单位 沈阳师范大学

如果某函数的返回值是个对象 ,则该函数被调用时,返回的对象?

A.

是通过拷贝构造函数初始化的

B.

是通过无参数的构造函数初始化的

C.

用哪个构造函数初始化,取决于函数中return 语句是怎么写的

D.

不需要初始化

  答案正确:1 分
2-20 分数 1 作者 黄淑伟 单位 沈阳师范大学

以下说法正确的是?

A.

在静态成员函数中可以调用同类的其他任何成员函数

B.

const成员函数不能作用于非 const 对象

C.

在静态成员函数中不能使用 this 指针

D.

静态成员变量每个对象有各自的一份

  答案正确:1 分
2-21 分数 1 作者 黄淑伟 单位 沈阳师范大学

以下对类A的定义,哪个是正确的?

A.

class A{ private:int v; public:void fun(){} }

B.

class A{ int v; A * next; void fun(){} };

C.

class A{ int v; public: void fun(); }; A::void fun(){}

D.

class A{ int v; public: A next; void fun(){} };

  答案正确:1 分
2-22 分数 1 作者 黄淑伟 单位 沈阳师范大学

在类体内说明友元使用的关键字是?

A.

virtual

B.

friend

C.

inline

D.

static

  答案正确:1 分
2-23 分数 1 作者 黄淑伟 单位 沈阳师范大学

有如下类的定义:

class Sample
{
public:
    Sample( );
    Sample(int x );
    ......
};
 

动态申请对象存储单元,调用一个带参构造函数,初值为2的语句是()。

A.

Sample *a=new Sample(2);

B.

Sample a=new Sample(2);

C.

Sample *a=new Sample[2];

D.

Sample a=new Sample[2];

  答案错误:0 分
2-24 分数 1 作者 黄淑伟 单位 沈阳师范大学

有如下定义:

class Sample
{
public:
    Sample( );
    Sample(int x );
    ......
};
 

如果用new创建对象数组,该数组中包含10个对象,则正确的语句为()。

A.

Sample *a=new Sample[10];

B.

Sample *a=new Sample(10);

C.

Sample *a=new Sample[ ];

D.

Sample *a=new Sample;

  答案正确:1 分
2-25 分数 1 作者 何振峰 单位 福州大学

下列对重载函数的描述中,( )是错误的。

A.

重载函数中不允许使用默认参数

B.

重载函数中编译根据参数表进行选择

C.

不要使用重载函数来描述毫无相干的函数

D.

构造函数重载将会给初始化带来多种方式

  答案正确:1 分
2-26 分数 1 作者 余春艳 单位 浙江大学

在下面类声明中,关于生成对象不正确的是( )。
class point
{ public:
int x;
int y;
point(int a,int b) {x=a;y=b;}
};

A.

point p(10,2);

B.

point *p=new point(1,2);

C.

point *p=new point[2];

D.

point *p[2]={new point(1,2), new point(3,4)};

  答案正确:1 分
2-27 分数 1 作者 何振峰 单位 福州大学

设A为自定义类,现有普通函数int fun(A& x)。则在该函数被调用]时:

A.

将执行复制构造函数来初始化形参x

B.

仅在实参为常量时,才会执行复制构造函数以初始化形参x

C.

无需初始化形参x

D.

仅在该函数为A类的友元函数时,无需初始化形参x

  答案正确:1 分
2-28 分数 1 作者 何振峰 单位 福州大学

以下哪一个不是正确的成员访问属性。

A.

protected

B.

private

C.

hidden

D.

public

  答案正确:1 分
2-29 分数 1 作者 何振峰 单位 福州大学

所有类都应该有:

A.

构造函数

B.

析构函数

C.

构造函数和析构函数

D.

以上答案都不对

  答案正确:1 分
2-30 分数 1 作者 何振峰 单位 福州大学

对于以下关于友元的说法

A.

如果函数fun被声明为类A的友元函数,则该函数成为A的成员函数

B.

如果函数fun被声明为类A的友元函数,则该函数能访问A的保护成员,但不能访问私有成员

C.

如果函数fun被声明为类A的友元函数,则fun的形参类型不能是A。

D.

以上答案都不对

  答案正确:1 分
2-31 分数 1 作者 何振峰 单位 福州大学

对于类之间的友元关系:

A.

如果类A是类B的友元,则B的成员函数可以访问A的私有成员

B.

如果类A是类B的友元,则B也是A的友元。

C.

如果类A是类B的友元,并且类B是类C的友元,则类A也是类C的友元。

D.

以上答案都不对。

  答案正确: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;
 

};

A.

f1

B.

f2

C.

f3

D.

f1和f2

  答案错误:0 分
2-33 分数 1 作者 张德慧 单位 西安邮电大学

在面向对象的软件系统中,不同类对象之间的通信的一种构造称为_______。

A.

属性

B.

封装

C.

D.

消息

  答案正确:1 分
2-34 分数 1 作者 张德慧 单位 西安邮电大学

在面向对象系统中,对象的属性是________。

A.

对象的行为特性

B.

和其他对象相关联的方式

C.

和其他对象相互区分的特性

D.

与其他对象交互的方式

  答案正确:1 分
2-35 分数 1 作者 陈晓梅 单位 广东外语外贸大学

假定AA为一个类,a()为该类公有的函数成员,x为该类的一个对象,则访问x对象中函数成员a()的格式为()

A.

x.a

B.

x.a()

C.

x->a()

D.

(*x).a()

  答案正确:1 分
2-36 分数 1 作者 李廷元 单位 中国民用航空飞行学院

某类中有一个无参且无返回值的常成员函数 Show,则正确的 Show 函数原型是

A.

const void Show();

B.

void const Show();

C.

void Show() const;

D.

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;
}
  A.

121

B.

232

C.

221

D.

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;
}
  A.

语句 1

B.

语句 2

C.

语句 3

D.

语句 4

  答案正确:1 分
2-39 分数 1 作者 王秀 单位 福州大学

以下说法正确的是()。

A.

每个对象内部都有成员函数的实现代码

B.

一个类的私有成员函数内部不能访问本类的私有成员函数

C.

类的成员函数之间可以相互调用

D.

编写一个类时,至少要写一个成员函数

  答案正确: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();的输出结果是()。

A.

val=10 const:val=20

B.

const:val=10 const:val=20

C.

const:val=10 val=20

D.

val=10 val=20

  答案正确:1 分
2-41 分数 1 作者 陈晓梅 单位 广东外语外贸大学

关于成员函数特征的描述中,( )是错误的。

A.

成员函数可以重载

B.

成员函数一定是内联函数

C.

一个类可以没有成员函数

D.

成员函数可以设置参数的默认值

  答案正确:1 分
2-42 分数 1 作者 陈晓梅 单位 广东外语外贸大学

设类AA已定义,假设以下语句全部合法,哪些语句会触发调用拷贝构造函数( )。

AA a, b; //1
AA c(10, 20); //2
AA d(c); //3
AA e = d; //4
  A.

2

B.

3

C.

4

D.

3 和 4

  答案正确:1 分
2-43 分数 1 作者 范鹏程 单位 内蒙古师范大学

对类的构造函数和析构函数描述正确的是

A.

构造函数可以重载,析构函数不能重载

B.

构造函数不能重载,析构函数可以重载

C.

构造函数可以重载,析构函数也可以重载

D.

构造函数不能重载,析构函数也不能重载

  答案正确:1 分
2-44 分数 1 作者 范鹏程 单位 内蒙古师范大学

类的析构函数是在什么时候调用的?

A.

类创建时

B.

创建对象时

C.

删除对象时

D.

不自动调用

  答案正确:1 分
2-45 分数 1 作者 范鹏程 单位 内蒙古师范大学

下列关于构造函数说法不正确的是

A.

构造函数必须与类同名

B.

构造函数可以省略不写

C.

构造函数必须有返回值

D.

在构造函数中可以对类中的成员进行初始化

  答案正确:1 分
2-46 分数 1 作者 范鹏程 单位 内蒙古师范大学

C++函数的声明和定义可以分开。函数声明不需要( )。

A.

返回类型

B.

函数名

C.

参数表

D.

函数体

  答案正确:1 分
2-47 分数 1 作者 范鹏程 单位 内蒙古师范大学

不能作为函数重载判断依据的是( )

A.

返回类型

B.

const

C.

参数个数

D.

参数类型

  答案正确:1 分
2-48 分数 1 作者 范鹏程 单位 内蒙古师范大学

下面关于new运算符的描述中错误的是( )

A.

使用new创建对象时必须定义初始值

B.

使用new创建对象时会调用类的构造函数

C.

new可以用来动态创建对象和对象数组

D.

使用new创建的对象可以使用delete删除

  答案正确:1 分
2-49 分数 1 作者 范鹏程 单位 内蒙古师范大学

不属于类的成员函数的是( ) 。

A.

构造函数

B.

析构函数

C.

友元函数

D.

复制构造函数

  答案正确:1 分
2-50 分数 1 作者 范鹏程 单位 内蒙古师范大学

对于C++结构体中定义的成员,其隐含的访问权限为( )

A.

public

B.

protected

C.

private

D.

static

  答案正确:1 分
2-51 分数 1 作者 范鹏程 单位 内蒙古师范大学

为类提供对外接口的是( )

A.

公有成员函数

B.

私有成员函数

C.

保护成员函数

D.

友元函数

  答案正确:1 分
2-52 分数 1 作者 范鹏程 单位 内蒙古师范大学

若类A的构造函数定义为
A(int aa=1, int bb=0) { a = aa; b = bb; }
则执行:A x(4);后,x.a和x.b的值分别是( )

A.

1,0

B.

1,4

C.

4,0

D.

4,1

  答案正确:1 分
2-53 分数 1 作者 范鹏程 单位 内蒙古师范大学

已知类A中的一个成员函数说明为void fun(A &a);,则A &a的含义是( )

A.

将a的地址值赋给变量fun

B.

指向类A的指针为a

C.

a是类A的对象引用,用来做函数fun()的形参

D.

变量A与a按位相与运算后作为函数fun()的参数

  答案正确:1 分
2-54 分数 1 作者 董俊 单位 燕山大学

下列哪一种情况下,类的复制构造函数不会被调用

A.

用类的一个对象赋值给另一个对象时

B.

当用类的一个对象去初始化该类的另一个对象时

C.

如果函数的形参是类的对象,调动函数时,进行形参和实参结合时

D.

如果函数的返回值是类的对象,函数执行完成返回调用者时

  答案正确:1 分
2-55 分数 1 作者 黄淑伟 单位 沈阳师范大学

以下关于友元的说法哪个是不正确的?

A.

一个类的友元函数可以访问类对象的私有成员

B.

友元类关系是相互的,即若类A是类B 的友元,类B也是类A的友元

C.

在一个类中可以将另一个类的成员函数声明为友元

D.

类之间的友元关系不能传递

  答案正确:1 分
2-56 分数 1 作者 文冬 单位 燕山大学

下面对静态数据成员的描述中,正确的是

A.

静态数据成员可以在类体内进行初始化

B.

静态数据成员不可以被类的对象调用

C.

静态数据成员不能受private控制符的作用

D.

静态数据成员可以直接用类名调用

标签:友元,函数,对象,成员,正确,int,析构,构造函数
来源: https://www.cnblogs.com/xinhua23/p/16401289.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有