PTA-类与对象

作者 张德慧

单位 西安邮电大学

C++程序中,类的构造函数名与类名相同。(T)

作者 张德慧

单位 西安邮电大学

C++程序中,一个类的构造函数可以被重载。(T)

作者 张德慧

单位 西安邮电大学

C++程序中,一个类的析构函数可以被重载。(F)

作者 张德慧

单位 西安邮电大学

析构函数的作用主要是释放对象占用的资源。(T)

作者 黄淑伟

单位 沈阳师范大学

当用一个对象去初始化同类的另一个对象时,要调用拷贝构造函数。(T)

作者 黄淑伟

单位 沈阳师范大学

对象间赋值将调用拷贝构造函数。(F)

作者 黄淑伟

单位 沈阳师范大学

构造函数可以通过对象多次调用。(F)

作者 黄淑伟

单位 沈阳师范大学

默认的拷贝构造函数实现的只能是浅拷贝,即直接将原对象的数据成员值依次复制给新对象中对应的数据成员,并没有为新对象另外分配内存资源。(T)

作者 黄淑伟

单位 沈阳师范大学

当类的数据成员中有指针类型时,必须定义一个特定的拷贝构造函数,该拷贝构造函数不仅可以实现原对象和新对象之间数据成员的复制,而且可以为新的对象分配单独的内存资源,这就是深拷贝构造函数。(T)

作者 王和兴

单位 东北大学秦皇岛分校

一个类可以有多个构造函数。(T)

作者 李志明

单位 燕山大学

对于类A,若其中的构造函数有A( )和A(int i=0,int y=0),则在主程序中语句 “A a;”不会出现调用构造函数的二义性,可以正常运行。答案为F,分值为2分。(F)

作者 何振峰

单位 福州大学

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

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

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

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

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

作者 余春艳

单位 浙江大学

在下面类声明中,关于生成对象不正确的是(C)。
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)};

作者 李廷元

单位 中国民用航空飞行学院

建立一个类对象时,系统自动调用(A)

A.构造函数

B.析构函数

C.友元函数

D.成员函数

作者 范鹏程

单位 内蒙古师范大学

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

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

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

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

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

作者 范鹏程

单位 内蒙古师范大学

假设MyClass是一个类,则该类的拷贝初始化构造函数的声明语句为(C)

A.MyClass&(MyClass x);

B.MyClass(MyClass x);

C.MyClass(MyClass &x);

D.MyClass(MyClass *x);

作者 范鹏程

单位 内蒙古师范大学

对于任意一个类,析构函数的个数最多为(B)

A.0

B.1

C.2

D.3

作者 李志明

单位 燕山大学

对类的数据成员或内嵌对象进行初始化时,不属于必须采用构造函数的初始化列表方式进行初始化的是(C)

A.内嵌对象

B.常数据成员

C.静态数据成员

D.对虚基类的初始化

作者 黄淑伟

单位 沈阳师范大学

下列哪一个说法是错误的?(D)

A.当用一个对象去初始化同类的另一个对象时,要调用拷贝构造函数

B.如果某函数有一个参数是类A的对象,那么该函数被调用时,类A的拷贝构造函数将被调用

C.如果函数的返回值是类A的对象时,则函数返回时,类A的拷贝构造函数将被调用

D.拷贝构造函数必须自己编写

作者 黄淑伟

单位 沈阳师范大学

假设A是一个类的名字,下面哪段程序不会用到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);

作者 黄淑伟

单位 沈阳师范大学

关于类的构造函数和析构函数描述中错误的是(A)。

A.类的析构函数可以重载

B.类的构造函数可以重载

C.析构函数是系统自动调用的

D.定义一个类时可以不显示定义构造函数和析构函数

作者 黄淑伟

单位 沈阳师范大学

下列关于构造函数的描述中,错误的是(C)。

A.构造函数既可以带参数,也可以不带参数

B.构造函数名与类名相同

C.带参数的构造函数具有类型转换作用

D.构造函数是系统自动调用的

作者 黄淑伟

单位 沈阳师范大学

关于类的析构函数描述正确的是(C)

A.析构函数可以有参数

B.析构函数可以重载

C.析构函数可以省略

D.析构函数有返回值类型

作者 黄淑伟

单位 沈阳师范大学

以下说法中正确的是(C)

A.一个类一定会有无参构造函数

B.构造函数的返回值类型是void

C.一个类只能定义一个析构函数,但可以定义多个构造函数

D.一个类只能定义一个构造函数,但可以定义多个析构函数

作者 黄淑伟

单位 沈阳师范大学

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

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

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

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

D.不需要初始化

作者 王和兴

单位 东北大学秦皇岛分校

下列关于构造函数说法错误的是(D)

A.构造函数必须与类同名

B.构造函数可以省略不写

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

D.构造函数必须有返回值

作者 王和兴

单位 东北大学秦皇岛分校

假定一个类的构造函数为Student(int i=4, int j=0) {a=i;b=j;}, 则执行Student stud(1);语句后,stud.a和stud.b的值分别为(A)。

A.1和0

B.1和4

C.4和0

D.4和1

6-1 创建CPU

作者 杨军

单位 四川师范大学

定义一个CPU类,包含等级(Rank)、频率(frequency)、电压(voltage)等属性。其中,rank为枚举类型CPU__Rank,定义为enum CPU_Rank{P1=1,P2,P3,P4,P5,P6,P7},frequency为单位是MHz的整型数,voltage为浮点型的电压值。

函数接口定义:

根据题目要求写出类。

裁判测试程序样例:

/* 请在这里填写答案 */ int main() { CPU a(P6,3,300); cout<<"cpu a's parameter"<<endl; a.showinfo(); //显示性能参数 CPU b; cout<<"cpu b's parameter"<<endl; b.showinfo(); //显示性能参数 CPU c(a); cout<<"cpu c's parameter"<<endl; c.showinfo(); //显示性能参数 }

输入样例:

输出样例:

create a CPU!
cpu a's parameter
rank:6
frequency:3
voltage:300
create a CPU!
cpu b's parameter
rank:1
frequency:2
voltage:100
copy create a CPU!
cpu c's parameter
rank:6
frequency:3
voltage:300
destruct a CPU!
destruct a CPU!
destruct a CPU!

解答:

#include<iostream>
using namespace std;
#define PI 1
#define P2 2
#define P3 3
#define P4 4
#define P5 5
#define P6 6
class CPU
{
public:
  int frequency;
  float voltage;
  int rank;
  CPU()
  {
    rank=1;
    frequency=2;
    voltage=100;
    cout<<"create a CPU!"<<endl;
  }
  CPU(int r,int f,float v)
  {
    rank=r;
    frequency=f;
    voltage=v;
    cout<<"create a CPU!"<<endl;
  }
  CPU(CPU &a)
  {
    rank=a.rank;
    frequency=a.frequency;
    voltage=a.voltage;
    cout<<"copy create a CPU!"<<endl;
  }
  ~CPU()
  {
    cout<<"destruct a CPU!"<<endl;
  }
  void showinfo()
  {
    cout<<"rank:"<<rank<<endl;
    cout<<"frequency:"<<frequency<<endl;
    cout<<"voltage:"<<voltage<<endl;
  }
};

6-2 创建计算机

作者 杨军

单位 四川师范大学

定义一个简单的Computer类,有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,有两个公有成员函数run、stop。cpu为CPU类的一个对象,ram为RAM类的一个对象,cdrom为CDROM类的一个对象,定义并实现这个类,为以上的类编写构造和析构函数,注意使用类组合的思想解决该问题,使得给出的主函数代码可以正确运行并得到给出的输出结果。

函数接口定义:

根据要求写出类的实现代码

裁判测试程序样例:

/* 请在这里填写答案 */ 在这里给出函数被调用进行测试的例子。例如: int main() { COMPUTER cpt1(6,4.0,200,60,32); //测试带参数构造 cout<<"cpt1's parameter:"<<endl; cpt1.showinfo(); cout<<"------------------------------"<<endl; COMPUTER cpt2; //测试不带参数构造 cout<<"cpt2's parameter:"<<endl; cpt2.showinfo(); cout<<"------------------------------"<<endl; COMPUTER cpt3(cpt1); //测试复制构造 cout<<"cpt3's parameter:"<<endl; cpt3.showinfo(); cout<<"------------------------------"<<endl; }

输入样例:

输出样例:

在这里给出相应的输出。例如:

create a CPU!
create a RAM!
create a CDROM!
create a COMPUTER with para!
cpt1's parameter:
cpu parameter:
rank:6
frequency:4
voltage:200
ram parameter:
volumn:60 GB
cdrom parameter:
speed:32
------------------------------
create a CPU!
create a RAM!
create a CDROM!
no para to create a COMPUTER!
cpt2's parameter:
cpu parameter:
rank:1
frequency:2
voltage:100
ram parameter:
volumn:1 GB
cdrom parameter:
speed:16
------------------------------
create a CPU by copy!
create a RAM by copy!
create a CDROM by copy!
create a COMPUTER by copy!
cpt3's parameter:
cpu parameter:
rank:6
frequency:4
voltage:200
ram parameter:
volumn:60 GB
cdrom parameter:
speed:32
------------------------------
destruct a COMPUTER!
destruct a CDROM!
desturct a RAM!
desturct a CPU!
destruct a COMPUTER!
destruct a CDROM!
desturct a RAM!
desturct a CPU!
destruct a COMPUTER!
destruct a CDROM!
desturct a RAM!
desturct a CPU!

 解答:

#include<bits/stdc++.h>
using namespace std;
class CPU
{
    private:
        int rank;
        double frequency;
        int voltage;
    public:
        CPU(int R,double F,int V)
        {
            rank=R;
            frequency=F;
            voltage=V;
            cout<<"create a CPU!"<<endl;
        }
        CPU(CPU &cpu)
        {
            rank=cpu.rank;
            frequency=cpu.frequency;
            voltage=cpu.voltage;
            cout<<"create a CPU by copy!"<<endl;
        }
        void showinfo()
        {
            cout<<"cpu parameter:"<<endl;
            cout<<"rank:"<<rank<<endl;
            cout<<"frequency:"<<frequency<<endl;
            cout<<"voltage:"<<voltage<<endl;
        }
        ~CPU()
        {
            cout<<"desturct a CPU!"<<endl;
        }
};
class RAM
{
    private:
        int volumn;
    public:
        RAM(int V)
        {
            volumn=V;
            cout<<"create a RAM!"<<endl;
        }
        RAM(RAM &ram)
        {
            volumn=ram.volumn;
            cout<<"create a RAM by copy!"<<endl;
        }
        void showinfo()
        {
            cout<<"ram parameter:"<<endl;
            cout<<"volumn:"<<volumn<<" GB"<<endl;
        }
        ~RAM()
        {
            cout<<"desturct a RAM!"<<endl;
        }
};
class CDROM
{
        int speed;
    public:
        CDROM(int S)
        {
            speed=S;
            cout<<"create a CDROM!"<<endl;
        }
        CDROM(CDROM &cdrom)
        {
            speed=cdrom.speed;
            cout<<"create a CDROM by copy!"<<endl;
        }
        void showinfo()
        {
            cout<<"cdrom parameter:"<<endl;
            cout<<"speed:"<<speed<<endl;
        }
        ~CDROM()
        {
            cout<<"destruct a CDROM!"<<endl;
        }
};
class COMPUTER
{
        CPU cpu;
        RAM ram;
        CDROM cdrom;
    public:
        COMPUTER():cpu(1,2,100),ram(1),cdrom(16)
        {
            cout<<"no para to create a COMPUTER!"<<endl;
        }
        COMPUTER(int rank,double frequency,int voltage,int volumn,int speed):cpu(rank,frequency,voltage),ram(volumn),cdrom(speed)
        {
            cout<<"create a COMPUTER with para!"<<endl;
        }
        COMPUTER(COMPUTER &computer):cpu(computer.cpu),ram(computer.ram),cdrom(computer.cdrom)
        {
            cout<<"create a COMPUTER by copy!"<<endl;
        }
        void showinfo()
        {
            cpu.showinfo();
            ram.showinfo();
            cdrom.showinfo();
        }
        ~COMPUTER()
        {
            cout<<"destruct a COMPUTER!"<<endl;
        }
};

6-3 复数类

作者 杨军

单位 四川师范大学

  1. 已知一个名为Complex的复数类,这个类包含:
    (1)私有成员:实部、虚部,且均为int 型
    (2)公有的带默认形参值的构造函数、复制构造函数
    (3)公有成员函数Display,其作用为显示复数
    要求:
    (1)实现满足上述属性和行为的Complex类定义;
    (2)设计函数AddComplex,函数AddComplex功能为实现两个复数相加,要求该函数的形参为复数类的常引用;
    (3)保证如下主函数能正确运行。

裁判测试程序样例:

/* 请在这里填写答案 */ int main(){ int x,y; cin>>x>>y; Complex c0(x,y); Complex c1(c0); cout<<"c1 is: "; c1.Display(); cin>>x>>y; Complex c2(x,y); cout<<"c2 is: "; c2.Display(); Complex c3; c3 = AddComplex(c1,c2); cout<<"c3 is: "; c3.Display(); return 0; }

输入样例:

在这里给出一组输入。例如:

2 -3 
3 4

输出样例:

在这里给出相应的输出。例如:

c1 is: 2-3i
c2 is: 3+4i
c3 is: 5+1i

解答:

#include<bits/stdc++.h>
using namespace std;
class Complex
{
    public:
    int real;
    int imag;
    Complex(int r,int i)
    {
        real=r;
        imag=i;
    }
    Complex(const Complex &c)
    {
        real=c.real;
        imag=c.imag;
    }
    void Display()
    {
        if(imag>0)
        {
            cout<<real<<"+"<<imag<<"i"<<endl;
        }
        else
        {
            cout<<real<<imag<<"i"<<endl;
        }
    }
    Complex(const Complex& c1,const Complex& c2)
    {
        real=c1.real+c2.real;
        imag=c1.imag+c2.imag;
    }
    Complex()
    {
        real;
        imag;
    }
};
Complex AddComplex(Complex c1,Complex c2)
{
    Complex c;
    c.real=c1.real+c2.real;
    c.imag=c1.imag+c2.imag;
    return c;
}

6-4 定义Date类

作者 范鹏程

单位 内蒙古师范大学

本题要求实现一个日期类定义,根据所定义的类可以完成相关的类测试。

Date类定义:

根据Date被使用的情况,进行Date类定义,要求通过构造函数进行日期初始化,并通过display()函数进行日期格式显示,显示格式为"月/日/年"

测试程序样例:

main( ) 函数定义如下

int main() { Date d1(3,25,2019); Date d2(3,30); Date d3(10); Date d4; d1.display(); d2.display(); d3.display(); d4.display(); return 0; } /* 请在这里填写答案 */

输出样例:

在这里给出相应的输出。例如:

3/25/2019
3/30/2019
10/1/2019
1/1/2019

 解答:

#include <bits/stdc++.h>
using namespace std;
class Date
{
    private:
    int month;
    int day;
    int year;
    public:
    Date(int m=1,int d=1,int y=2019)
    {
        month = m;
        day = d;
        year = y;
    };
    void display()
    {
        cout<<month<<"/"<<day<<"/"<<year<<endl;
    }
};

6-5 学生类的构造与析构

作者 范鹏程

单位 内蒙古师范大学

类定义:

定义一个学生类Student,使得main()函数能够得到指定的输出结果

main()函数如下:

/* 请在这里填写答案 */ int main() {Student stud1(10010,"Wang_li",'f'); stud1.display(); Student stud2(10011,"Zhang_fun",'m'); stud2.display(); return 0; }

输入样例:

输出样例:

在这里给出相应的输出。例如:

Constructor called.
num:10010
name:Wang_li
sex:f

Constructor called.
num:10011
name:Zhang_fun
sex:m

Destructor called.
Destructor called.

解答:

#include <bits/stdc++.h>
using namespace std;
class Student
{
    private:
    int number;
    string name;
    char sex;
    public:
    Student(int num,string n,char s)
    {
        cout<<"Constructor called."<<endl;
        number = num;
        name = n;
        sex = s;
    }
    void display()
    {
        cout<<"num:"<<number<<endl;
        cout<<"name:"<<name<<endl;
        cout<<"sex:"<<sex<<endl;
        cout<<endl;
    }
    ~Student()
    {
        cout<<"Destructor called."<<endl;
    }
}; 

PTA(Programming Test Assessment)是一个在线编程测试和评估平台,可以用于程序设计教学和招聘面试。在PTA上,可以练习各种编程题目,包括面向对象编程的题目。 要创建学生类和对象数组,可以按照以下步骤进行: 1. 定义学生类:首先需要定义一个学生类,包含学生的姓名、学号、年级、成绩等属性,以及相应的构造函数和成员函数。 ```cpp class Student { public: string name; int id; int grade; int score; Student(string name, int id, int grade, int score) { this->name = name; this->id = id; this->grade = grade; this->score = score; } void display() { cout << name << " " << id << " " << grade << " " << score << endl; } }; ``` 2. 创建对象数组:在主函数中创建对象数组,可以使用循环语句逐个输入学生信息,或者从文件中读取信息。 ```cpp int main() { const int MAX_STUDENT = 100; Student students[MAX_STUDENT]; int n; cin >> n; for (int i = 0; i < n; i++) { string name; int id, grade, score; cin >> name >> id >> grade >> score; students[i] = Student(name, id, grade, score); } for (int i = 0; i < n; i++) { students[i].display(); } return 0; } ``` 在上面的代码中,我们定义了一个常量MAX_STUDENT表示最大的学生数,创建了一个名为students的对象数组,并使用循环语句逐个输入学生信息。最后,我们调用每个学生对象的display()函数显示学生信息。 注意,当对象数组被创建,每个对象都会自动调用构造函数,以初始化对象的属性。在本例中,我们将学生信息作为参数传递给构造函数,以便在创建对象进行初始化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值