资源描述
姓名 学号 学院 专业 座位号
( 密 封 线 内 不 答 题 )
……………………………………………………密………………………………………………封………………………………………线……………………………………线………………………………………
_____________ ________
…
诚信应考 ,检验 作弊 将带来严格 后果!
华南理工大年夜 学期末检验
《低级 语言 次序 方案 〔2〕》试卷A
本卷须知:1. 考前请将密封线内各项信息填写明晰 ;
2. 所有 答案 写在答题纸上,答在不的 所在 无效;
3. 试卷可做草稿纸,试卷必须 与答题纸同时提交;
4.检验 办法 :闭卷;
5. 本试卷共五大年夜 题,总分值100分,检验 时辰 120分钟。
一.单项选择 题〔每题2分,共20分〕
精选可编辑
1.在C++中,有关类跟 东西 精确 说法是( A )。
3
A.东西 是类的一个实例 B.东西 是类的存储空间
C.一个类只能有一个东西 D.类是次序 包,东西 是存储空间
2.在类定义 中,称为接口的成员是( C )。
A. 所有 类成员 B. private或protected的类成员
C. public的类成员 D. public或private的类成员
3. 一个类的友员函数可以 通过( D )访征询 该类的所有 成员。
A.静态数据 B.析构造函数 C.this指针 D.类东西 参数
4. 下面描画差错 的选项是( B )。
A.自定义 构造函数该当 是公有成员函数 B.构造函数可以 是虚函数
C.构造函数在树破 东西 时自动 调用 实行 D.构造函数可以 重载
5. 在类的承袭关系 中,基类的〔 B 〕成员在派生类中可见。
A. 所有 B. public跟 protected
C. 只要 public D. 只要 protected
6.设B类是A类的派生类,有说明语句
A a, *ap; B b, *bp;
那么以下精确 语句是〔 C 〕。
A. a=b; B. b=a; C. ap=&b; D. bp=&a;
7.C++中,以下〔 D 〕语法办法 不属于运行 时的多态。
A. 按照if语句的求值决定 次序 流程 B. 按照基类指针指向东西 调用 成员函数
C. 按照switch语句的求值决定 次序 流程 D. 按照参数个数、典范 调用 重载函数
8. 假设 对A类定义 一个重载“+〞号运算符的成员函数,以便完成 两个A类东西 的加法,并前去 相加后果,那么该成员函数的函数原型为( B )。
A.A operator +( const A &A1, const A &A2 ); B.A A:: operator +( const A &A2 );
C.A::operator +( A &A2 ); D.A A::operator +( );
9. 一个类模板定义 了静态数据成员,那么( A )。
A.每一个实例化的模板类都有一个自己的静态数据成员。
B.每一个实例化的东西 都有一个自己的静态数据成员。
C.它的典范 必须 是类模板定义 的抽象 典范 。
D.所有 模板类的东西 公享一个静态数据成员。
10.读一个C++数据文件,要创破 一个( A )流东西 。
A.ifstream B.ofstream C.cin D.cout
二.简答题〔每题4分,共20分〕
1.有右图所示类格。类X中有数据成员int a。按照以下函数注释的编译信息,分析int X::a的访征询 特点 ,class Y对class X跟 class Z对class Y的承袭性质 。
class X
class Y
class Z
void Y::funY() { cout<<a<<endl; } //精确
void Z::funX() { cout<<a<<endl; } //差错
void main()
{ X x; Y y; Z z;
cout<<x.a<<endl; //精确
cout<<y.a<<endl; //差错
cout<<z.a<<endl; //差错
}
int X::a是class X的public数据成员,class Y为protected承袭class X,class Z为private承袭class Y。
2.有人定义 一个教师类派生一个老师 类。他认为 “姓名〞跟 “性不〞是教师、老师 共有的属性,声明 为public,“职称〞跟 “工资 〞是教师特有的,声明 为private。在老师 类中定义 特有的属性“班级〞跟 “效果〞。因而 有
class teacher
{ public:
char name[20]; char sex;
private:
char title[20]; double salary;
};
class student : public teacher
{ private:
char grade[20] ; int score; };
你认为 如斯 定义 适合吗?请做出你认为 公正 的类构造定义 。
class person
{ public:
char name[20]; char sex;
};
class teacher : public person
{ private:
char title[20]; double salary;
};
class student : public person
{ private:
char grade[20] ; int score;
};
3.有类定义
class Test
{ int a,b;
public:
Test ( int m, int n ) { a=m; b=n; }
void Set( int m, int n ) { a=m; b=n; }
//……
};
有人认为 “Test跟 Set函数的功能 一样,只要 定义 其中 一个就够了〞。这种说法精确 吗?什么缘故 ?
带参数的构造函数用于树破 东西 数据初始化,成员函数用于次序 运行 时修负数据成员的值。
4.假设 有声明
template <typename T> class Tclass { /*……*/ } ;
树破 一个Tclass东西 用以下语句
Tclass Tobj;
有差错 吗?假设 出错 ,请分析缘故,并写出一个精确 的说明语句。
不 实例化类属参数。
Tclass Tobj<int>;
5.C++的文本文件可以 用binary办法 打开 吗?假设 有以下语句
fstream of("d:testfile", ios::out|ios::binary);
double PI=3.1415;
请写出把PI的值写入文件"d:testfile"末了 的语句。
可以 。
of.seekp(0,ios::end);
of.write((char*)&PI, sizeof(double));
三.阅读 以下次序 ,写出实行 后果〔每题6分,共24分〕
1.
#include <iostream.h> //运算符重载
enum BoolConst { False=0 , True=1 }; //定义 列举 典范
class Boolean
{ public:
Boolean(BoolConst x = False) { logic = x; }
void print() const { logic? cout<<" TRUE " : cout<<" FALSE "; }
friend Boolean operator +(const Boolean & obj1, const Boolean & obj2);
friend Boolean operator *(const Boolean & obj1, const Boolean & obj2);
protected: BoolConst logic;
};
Boolean operator+ ( const Boolean & obj1, const Boolean & obj2 )
{ return (obj1.logic||obj2.logic)?Boolean(True):Boolean(False); }
Boolean operator* ( const Boolean & obj1, const Boolean & obj2 )
{ return (obj1.logic && obj2.logic) ? Boolean(True) : Boolean(False); }
void main()
{ Boolean a(False), b(True), c, d ;
c = a * b; d = a + b;
a.print(); b.print(); c.print(); d.print();
cout<<endl;
}
FLASE TRUE FALSE TRUE
2.
#include <iostream.h> //模板,静态数据成员
template <typename T>
class List
{ public:
List(T x=0) { data = x; }
void append(List *node ) { node->next=this; next=NULL; total++;}
List *getnext() { return next; }
T getdata() {return data; }
static int total;
private:
T data;
List *next;
};
template <typename T> int List<T>::total=0;
void main()
{ int i, n=5;
List <int> headnode; List <int> *p, *last;
last = &headnode;
for( i=1; i<=n; i++ )
{ p = new List<int>(i*2); p->append( last ); last = p; }
p = headnode.getnext();
while( p )
{ cout << p->getdata() <<" "; p = p->getnext(); }
cout<<endl;
cout<<"total="<<List<int>::total<<endl;
}
2 4 6 8 10
Total=5
3.
#include<iostream.h> //类成员
#include<math.h>
class Point
{ public:
Point(int x1=0, int y1=0)
{ x = x1; y = y1; cout<<"Point构造函数\n"; }
int GetX() { return x; }
int GetY() { return y; }
private:
int x; int y;
};
class Distance
{ public:
Distance(Point xp1, Point xp2);
double GetDis() { return dist; }
private:
Point p1;
Point p2;
double dist;
};
Distance::Distance(Point xp1, Point xp2): p1(xp1), p2(xp2)
{ cout<<"Distance构造函数\n";
double x = double(p1.GetX() - p2.GetX());
double y = double(p1.GetY() - p2.GetY());
dist = sqrt(x * x + y * y);
}
void main()
{ Point myp1(0,0), myp2(0,20);
Distance mydist(myp1,myp2);
cout<<"The distance is "<<mydist.GetDis()<<endl;
}
Point构造函数
Point构造函数
Distance构造函数
The distance is 20
4. 写出data.txt中的后果跟 屏幕表示 的后果。
#include <fstream.h>
void main()
{ int a=10; double x=50.5;
char str[10], fname[20] = "d:\\data.txt";
fstream iofile(fname,ios::out);
if(!iofile) return;
iofile<<"Data:\t"<<a+10<<" "<<x<<endl;
iofile.close();
iofile.open(fname, ios::in);
if(!iofile) return;
iofile>>str>>a>>x;
cout<<"string="<<str<<"\n"<<"a="<<a<<", x= "<<x<<endl;
}
Data.txt
Data: 20 50.5
输出
string= Data:
a=20, x=50.5
四. 按照次序 输出填空。〔每空2分,共24分〕
1. //成员跟 友员
#include<iostream.h>
class Time
{ public:
Time(int h, int m) {hours=h; minutes=m;}
________(1)________ Time12(); void
________(2)________ Time24(Time time); friend void
private: int hours, minutes;
};
_________(3)__________ Time12() void Time::
{if(hours>12) { cout<<hours-12<<":"<<minutes<<"PM\n" ; }
else cout<<hours<<":"<<minutes<<"AM\n" ;
}
void Time24(Time time)
{ cout _______(4)________ ;} <<time.hours<<":"<<time.minutes<<"\n"
void main()
{Time T1(20,30), T2(10,45);
T1.Time12(); Time24(T1); T2.Time12(); Time24(T2);
}
次序 输出:
8:30PM
20:30
10:45AM
10:45
2. //虚承袭
#include<iostream.h>
class A
{ public:
A(const char *s){cout<<s<<'\t';}
~A(){}
};
class B: (5) A virtual public
{ public:
B(const char *s1, const char *s2):A(s1){cout<<s2<<'\t';}
};
class C: (6) virtual public A
{ public:
C(const char *s1, const char *s2):A(s1){ cout<<s2<<'\t';}
};
class D:public B, public C
{ public:
D(const char *s1,const char *s2,const char *s3,const char *s4)
: (7) A(s1),B(s1,s2),C(s1,s3)
{cout<<s4<<'\t';}
};
void main()
{ D *ptr=new D("class A","class B","class C","class D");
delete ptr;
}
次序 输出:
class A class B class C class D
3.
#include<iostream.h> //承袭
#include<string.h>
class studentID
{ public:
studentID ________(8)________ //(int d=0) 构造函数的默认 参数
{ value=d; cout<<value<<'\t'; } ;
protected:
int value;
} ;
class student : public studentID
{ public:
student ______(9)______ (char *pname="no name",int ssID=0):studentID(ssID)
{ strncpy(name, pname, sizeof(name));
name[sizeof(name)-1]='\0'; cout<<name<<'\n';
} ;
protected:
char name[20];
};
void main()
{ student s1("Ranry",9818) , s2("Jenny"), s3; }
次序 输出:
9818 Ranry
0 Jenny
0 no name
4. //多态
#include <iostream.h>
class p_class
{ int num ;
public :
void set_num( int val ){ num=val;}
void show_num( ) ;
};
void p_class :: show_num( ){ cout<<num<< '\t';}
void main()
{ p_class ob[3], *p ;
for( int i=0; i<3;i++ ) ob[i].set_num((i+1)*15);
(10) ; p->show_num( ); p=ob
(11) ; p->show_num( ); p=ob+2
(12) ; p->show_num( ); p=ob+1
}
次序 输出:
15 45 30
五、完成 次序 。〔第1小题4分,第2小题8分,共12分〕
1.按照次序 输出,以最小办法 补偿 A类跟 B类的成员函数。
#include < iostream.h >
class A
{ public :
//A类的成员函数
virtual ~A(){cout<<"A_object destroyed.\n";}
};
class B : public A
{ public :
//B类的成员函数
~B(){cout<<"B_object destroyed.\n";}
};
void main ( )
{ A * p=new B ; delete p; }
输出:
B_object destroyed.
A_object destroyed.
2.给出基类Figure定义 跟 main 函数如下:
class Figure
{ protected :
double x,y;
public:
void set(double i, double j=0) { x=i; y=j; }
virtual void showarea()const = 0 ;
};
#include<iostream.h>
void main()
{ Triangle t; Square s;
t.set(10.48,50);
t.showarea();
s.set(888,100);
s.showarea();
}
编写派生类Triangle跟 Square的最小定义 ,以便在main 函数中调用 派生类函数showarea()的差异 完成 版本求直角三角形跟 矩形的面积。
class Triangle : public Figure
{ public :
void showarea()const
{ cout<< "Triangle with high "<<x<<" and base "<<y;
cout<< " has an area of "<<x*0.5*y<<"\n"; }
};
class Square : public Figure
{ public:
void showarea()const
{ cout<<"Square with dimension "<<x<<"*"<<y;
cout<<" has an area of "<<x*y<<"\n";
}
};
《低级 语言 次序 方案 〔C++II〕》试卷第 9 页 共 9 页
展开阅读全文