文档视界 最新最全的文档下载
当前位置:文档视界 › 面向对象程序设计复习资料

面向对象程序设计复习资料

面向对象程序设计复习资料
面向对象程序设计复习资料

面向对象程序设计期末总复习题

一、单项选择题

1.下面关于对象概念的描述中,_______是错误的。(B)

A.对象代表着正在创建的系统中的一个实体

B.对象就是C语言中的结构体变量

C.对象是一个状态和操作(或方法)的封装体

D.对象之间的信息传递是通过消息进行的

2. 继承机制的作用是:(C)

A.信息隐藏B.数据封装C.定义新类D.数据抽象

3.有关析构函数的说法不正确的是_________(D)

A.析构函数有且只有一个

B.析构函数无任何函数类型

C.析构函数没有形参

D.析构函数不能是虚函数

4.友元的作用之一是__________(A)

A.提高程序的运行效率

B.加强类的封装性

C.实现数据的隐藏性

D.增加成员函数的种类

5.通常拷贝构造函数的参数是__________。(C)

A.某个对象名

B.某个对象的成员名

C.某个对象的引用名

D.某个对象的指针名

6.如果在基类中将show声明为不带返回值的纯虚函数,正确的写法是________。(C)

A.virtual show()=0;

B.virtual void show();

C.virtual void show()=0;

D.void show=0 virtual;

7.下面关于友元的描述中,错误的是_________。(D)

A.友元函数可以访问该类的私有数据成员

B.一个类的友元类中的成员函数都是这个类的友元函数

C.友元可以提高程序的运行效率

D.类与类之间的友元关系可以继承

8.在C++中,_________运算符不能重载。(B)

A. +

B.?:

C.-

D.<=

9.下列关于运算符重载的描述中,________是正确的。(D)

A.运算符重载可以改变操作数的个数

B.运算符重载可以改变优先级

C.运算符重载可以改变结合性

D.运算符重载不可以改变语法结构

10. 在下列函数原型中,可以作为类AA构造函数的是_________(D)

A.void AA(int) ; B.int AA( ) ; C.AA(int)const; D.AA(int);

11.在声明类时,下面的说法正确的是_________。(C)

A.可以在类的声明中给数据成员赋初值

B.数据成员的数据类型可以是register

C.private,public,protected可以按任意顺序出现

D.没有用private,public,protected定义的数据成员是公有成员

12.继承具有________,即当基类本身也是某一个类的派生类时,底层的派生类也会自动继承间接基类的成员。(B)

A.规律性

B.传递性

C.重复性

D.多样性

13.在多重继承中,公有派生和私有派生对于基类成员在派生类中的可访问性与单继承的规则___________。(A)

A.完全相同

B.完全不同

C.部分相同,部分不同

D.以上都不对

14.对虚函数的调用__________。(D)

A.一定使用动态联编

B.必须使用动态联编

C.一定使用静态联编

D.不一定使用动态联编

15.关于成员函数特征的下述描述中,_______是错误的。(A)

A.成员函数一定是内置函数

B.成员函数可以重载

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

D.成员函数可以是静态的

16. 下面关于c++语言变量的叙述错误的是_______(B)

A.在c++语言中变量分为auto,static,extern和register四种存储类型

B.自动变量和外部变量的作用域为整个程序

C.内部变量的作用域是定义它的函数

D.外部静态变量的作用域是定义它的文件

17.下列的各类函数中,_______不是类的成员函数。(C)

A.构造函数

B.析构函数

C.友元函数

D.拷贝构造函数

18. 有如下类声明:

class Foo {ing bar ;};

则Foo类的成员bar是_________(C)

A.公有数据成员B.公有成员函数C.私有数据成员D.私有成员函数

19.下列表示引用的方法中,__________是正确的。已知:int m=10; (D)

A. float &t=&m;

B.int &y=10;

C.int &z;

D. int &x=m;

20.设置虚基类的目的是________。(B)

A.简化程序

B.消除二义性

C.提高运行效率

D.减少目标代码

21.对于类中定义的成员,其隐含访问权限为________(B)

A.public

B.private

C.static

D.protected

22.关于类和对象不正确的说法是________ (B)

A.类是一种类型,它封装了数据和操作

B.一个类的对象只有一个

C.对象是类的实例

D.一个对象必属于某个类

23.声明一个类的对象时,系统自动调用一个函数;撤消对象时,系统自动调用一个函数;该函数为___c___

A.成员函数;构造函数

B.复制构造函数;析构函数

C.构造函数;析构函数

D.析构函数;复制构造函数

24.当一个派生类私有继承一个基类时,基类中的所有公有成员和保护成员成为派生类的__A______

A.private成员

B.protected成员

C.public成员

D.友元

25.在C++中,要实现动态联编,必须使用_____D___调用虚函数

A.类名

B.派生类指针

C.对象名

D.基类指针

26.若一个类中含有纯虚函数,则该类称为____A____

A. 抽象类

B. 纯基类

C.派生类

D. 基类

27.下列关于this指针的叙述中,正确的是___D_____

A.任何与类相关的函数都有this指针

B.类的成员函数都有this指针

C.类的友元函数都有this指针

D.类的非静态成员函数才有this指针

28.有如下类声明:

class Book {int num() ;};

则Book类的成员num是___D_____

A.公有数据成员B.公有成员函数C.私有数据成员D.私有成员函数29.下面有关重载函数的说法中正确的是___C_____

A.重载函数必须具有不同的返回值类型;

B.重载函数形参个数必须不同;

C)重载函数必须有不同的形参列表; D.重载函数名可以不同;

30.设置虚基类的目的是___A_____

A.消除二义性

B.简化代码

C.提高运行效率

D.减少目标代码

31.在C++语言程序中,对象之间的相互通信通过___B_____

A.继承实现

B.调用成员函数实现

C.封装实现

D.函数重载实现

32.下列运算符中,在C++语言中不能重载的是__C______

A.*

B.>=

C.::

D./

33.下面对友元函数描述正确的是___C_____

A.友元函数的实现必须在类的内部定义

B.友元函数是类的成员函数

C.友元函数破坏了类的封装性和隐藏性

D.友元函数不能访问类的私有成员34.下面叙述不正确的是___A_____

A.基类的保护成员在派生类中仍然是保护成员

B.基类的保护成员在公有派生类中仍然是保护成员

C.基类的保护成员在私有派生类中是私有成员

D.对基类成员的访问必须是无二义性

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

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

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

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

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

36.在C++类语言体系中,不能被派生类继承的有_______B

A.转换函数B.构造函数C.虚函数D.静态成员函数

37.在类的定义中,用于为对象分配内存空间,对类的数据成员进行初始化并执行其他内部管理操作的函数是____C____

A.友元函数

B.虚函数

C.构造函数

D.析构函数

38.下列关于虚基类的描述中,错误的是_B_______

A.设置虚基类的目的是为了消除二义性;

B.虚基类的构造函数在非虚基类之后调用;

C.若同一层包含多个虚基类,这些基类的构造函数按照它们的次序调用;

D.若虚基类由非基类派生而来,则仍然先调用基类构造函数,再用派生类的构造函数;

39.考虑函数原型void test(int a,int b=7,char="*"),下面的函数调用中,属于不合法调用的是___C_____

A.test(5)

B.test(5,8)

C.test(6,"#")

D.test(0,0."*");

40.下列关于构造函数的描述中,错误的是___D_____

A.构造函数可以设置默认参数;

B.构造函数在定义类对象时自动执行

C.构造函数可以是内联函数;

D.构造函数不可以重载

41.在重载一个运算符时,如果其参数表中有一个参数,则说明该运算符是( )。 D

A.一元成员运算符 B.二元成员运算符 C.一元友元运算符 D.选项B和选项C都可能

42.在公有派生情况下,有关派生类对象和基类对象的关系,下列叙述不正确的是( )。 C

A.派生类的对象可以赋给基类的对象 B.派生类的对象可以初始化基类的引用

C.派生类的对象可以直接访问基类中的成员 D.派生类的对象的地址可以赋给指向基类的指针

43.下面关于虚函数的描述,错误的是( )。B

A.在成员函数声明的前面加上virtual修饰,就可把该函数声明为虚函数

B.基类中说明了虚函数后,派生类中对应的函数也必须说明为虚函数

C.虚函数可以是另一个类的友元函数,但不能是静态成员函数

D.基类中说明的纯虚函数在其任何派生类中都必须实现

44.定义派生类时,若不使用关键字显示地规定采用何种继承方式,则默认方式为( )。 A

A.私有继承 B.非私有继承 C.保护继承 D.公有继承

45.有如下程序:

#include

using namespace std;

class ONE{

int c;

public:

ONE():c(0){cout<<1;}

ONE(int n):c(n){cout<<2;}

};

class TWO{

ONE onel;

ONE one2;

public:

TWO(int m):one2(m){cout<<3;}

};

int main(){

TWO t4()

return 0

}

运行时的输出结果是( )。 C

A.3

B.23

C.123

D.213

46.关于静态数据成员的描述中正确的是D

A)类的静态数据成员不是类的所有对象共享的数据B)类的静态数据成员不能被类的成员函数调用C)类的静态数据成员不能被类的构造函数调用D)类的静态数据成员必须进行初始化

47下面正确的是,在父类中的访问属性访问修饰符在子类中的访问属性()C

A)public,private不能直接访问 B)protect,public,public

C)private,public不能直接访问 D)protect,private,protect

48类A是类B的友元,类B是类C的友元,则下列说法正确的是D

A)类B是类A的友元B)类C是类A的友元

C)类A是类C的友元D)以上都不对

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

A)构造函数必须与类同名 B)构造函数可以省略不写

C)构造函数必须有返回值 D)在构造函数中可以对类中的成员进行初始化

50.类的析构函数的作用是D

A)一般成员函数的初始化 B)类的初始化

C)对象的初始化D)删除类创建的对象

51.下列说法正确的是B

A)内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方

B)内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方

C)类的内联函数必须在类体内定义

D)类的内联函数必须在类体外通过加关键字inline定义

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

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

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

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

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

二、知识点

1.实现运行时的多态性要使用虚函数。

2.如果一个类至少有一个纯虚函数,那么就称该类为抽象类。

3. 运算符重载不能改变操作符的个数、运算符的优先级、运算符的结合性和运算符的语法结构。

4. 构造函数是一种特殊的成员函数,它主要用来为对象分配内存空间,对类的数据成员进行初始化并执行对象的其他内部管理操作。

5. 静态成员函数不能直接引用类中说明的非静态成员。

6. 引用是给对象取一个别名,它引入了对象的同义词。

7.设置友元函数的目的是为能够访问该类的私有成员。

8.运算符重载仍然保持原来的优先级、结合性和语法结构。

9.基类的私有成员不能被派生类的成员访问。

10.静态联编支持的多态性称为编译时的多态性,也称静态多态性。

11.任何类中允许有三种访问权限的数据,这三种访问权限分别是public、private、protected。

12.为了满足运算符“+”的可交换性,必须将其重载为友元函数。

13.对于含有对象成员的派生类,其构造函数的执行顺序为:先执行基类的构造函数、再执行对象成员的构造函数,后执行派生类的构造函数。

14.利用成员函数对双目运算符重载,其左操作数为this指针指出的对象,右操作数为成员函数参数。

15.C++允许在相同的作用域内以相同的名字定义几个不同实现的函数,称这种同一个函数名多个含义的现象为函数重载。

16.通过使用new和delete两个运算符进行的分配为动态存储分配。

17.当类定义中有数据成员为指针时,解决浅拷贝出现的运行错误的方法是编写拷贝构造函数。

18.如果使用protected继承基类,其公有成员就会变成派生类的保护成员,其保护成员就会变成派生类的

保护成员,其私有成员不能继承

19.一个函数功能不太复杂但要求被频繁调用,应定义为内联函数。

20.抽象类只能作为基类使用,而不能声明它的对象。

21.构造函数可以重载,析构函数不可以重载。

22.静态成员函数没有this指针。

23.类有两个特殊的成员函数构造函数和析构函数。

24.在表达式x+y*z中,+是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。其中operator+

有一个参数,operator*有两个参数。

25.一个派生类只有一个基类的情况称为单继承,而有多个直接基类的情况称为多继承。

26.调用析构函数的次序正好与调用构造函数的次序相反。

27. 非成员函数应说明为类的友元函数才能访问这个类的private成员。

28.通过使用new和delete两个运算符进行的分配为动态存储分配。

29.如果类B继承了类A,则称类A为类B的基类,类B称为类A的派生类

30. 表达式operator+(x,y)还可以表示为x+y 。

31C++语言中的多态性分为编译时的多态性和运行时的多态性。

32将x+y*z中的"+"用成员函数重载,"*"用友元函数重载,应解释为x. operator+(operator*(y,z))

33如果要把返回值为void的函数A声明为类B的友元函数,则应在类B的定义中加入的语句是friend void A( );

34派生类的成员一般分为两部分,一部分是从基类继承的成员,另一部分是自己定义的新成员。

35继承的方式有公有继承、私有继承和保护继承3种。

三、读程序写结果

1. 写出下列程序的运行结果

#include

class sample

{

public:

sample()

{cout<<”hello”<

};

void fn(int i)

{static sample c;

cout<<”j=”<

}

void main()

{fn(20);

fn(30);

}

hello

j=20

j=30

2.写出下列程序的运行结果()

#include

int n=0;

int & f(int m)

{

n+=m;

return n;

}

void main()

{

f(22)+=20;

cout<<”n=”<

n=42

3. 写出下列程序的运行结果()#include

class A

{

public:

int num;

A(int i){num=i;}

A(A &a){num=a.num;num+=15;}

void print(){cout<

};

void main()

{

A a(8);

A b(a);

a.print();

b.print();

}

8

23

4.写出下列程序的运行结果()

#include

void main()

{

int a[10]={11,10,9,8,7,6,5,4,3},*p=a+5;

cout<<*--p<

*(p+3)+=5;

cout<

}

7

9

5.写出下列程序的运行结果()

#include

class A

{

int a;

public:

void seta(int x){a=x;}

void showa(){cout<

};

class B

int b;

public:

void setb(int x){b=x;}

void showb(){cout<

};

class C:public A,private B

{

private:

int c;

public:

void setc(int x,int y,int z)

{

c=z;

seta(x);

setb(y);

}

void showc(){cout<

};

void main()

{

C c;

c.seta(8);

c.showa();

c.setc(4,6,7);

c.showc();

}

8

7

6.写出下列程序的运行结果()

#include

class sample

{

int n;

public:

sample(){}

sample(int m){n=m;}

int &operator--(int)

{

n--;

return n;

}

void disp(){cout<<"n="<

};

void main()

{

sample s(18);

(s--)++;

s.disp();

}

n=18

7. 写出下列程序的运行结果()

#include

class sample

{

int x;

public:

sample(){}

void setx(int i){x=i;}

friend int fun(sample b[],int n)

{

int m=0;

for(int i=0;i

if(b[i].x>m)

m=b[i].x;

return m;

}

};

void main()

{

sample a[10];

int arr[]={9,8,4,7,55,32,20,15,68,65};

for(int i=0;i<10;i++)

a[i].setx(arr[i]);

cout<<"the result is "<

}

the result is 68

8下列程序的输出结果为( )

#include

void fun(int x=0,int y=0)

{

cout<

}

void main()

{

fun(18);

}

180

9.写出下列程序的运行结果( ) #include

class M{

public:

M(int a=0,int b=0) {x=a;y=b;}

int getx() {return x;}

int gety() {return y;}

private:

int x,y;

};

void main()

{

M op1(22,18);

int i,j;

i=op1.getx();

j=op1.gety();

cout<<"j="<

}

j=22i=18

10写出下列程序的运行结果( ) #include

class Cat

{

int num,age;

public:

Cat(int i,int j){num=i;age=j;}

Cat(Cat &c){num=c.num; age=c.age;num++;}

void print(){cout<

};

void main()

{

Cat c1(33,12);

Cat c2(c1);

c2.print();

}

34,12

11.写出下列程序的运行结果( ) #include

using namespace std;

class Test

{

static int count;

public:

Test(){

++count;

cout<<"对象数量="<

}

~Test(){

--count;

cout<<"对象数量="<

}

};

int Test::count=0;

void main()

{

Test t[3];

}

对象数量=1

对象数量=2

对象数量=3

对象数量=2

对象数量=1

对象数量=0

12.写出下列程序的运行结果( ) #include

#include

class girl{

public:

girl(char *n,int d)

{

name=new char[strlen(n)+1];

strcpy(name,n);

age=d;

}

friend void disp(girl &);

~girl()

{delete []name;}

private:

char *name;

int age;

};

void disp(girl &x)

{cout<<"Girl\'s name is "<

void main()

{

girl e("李华",28);

disp(e);

}

Girl's name is李华,age:28

13.写出下列程序的运行结果( ) #include

using namespace std;

class Book

{

int num,price;

public:

Book(int a=0,int b=0){num=a;price=b;}

void showMoney(){cout<

};

void main()

{

Book b[]={Book(2,8),Book(5,10),Book(13,20)};

Book *p;

int i;

p=&b[2];

for(i=0;i<3;i++,p--)

p->showMoney();

}

260

50

16

14.写出下列程序的运行结果( ) #include

int f(int);

int main()

{ int i;

for(i=0;i<5;i++)

cout<

return 0;

}

int f(int i)

{ static int k=3;

for(;i>0;i--)

k +=i*2;

return k;

}

3 5 11 23 43

15.有如下程序

void main()

{ char ch[2][5]={"6937","8254"},*p[2];

int i,j,s=0;

for(i=0;i<2;i++)p[i]=ch[i];

for(i=0;i<2;i++)

for(j=0;p[i][j]>′\0′;j+=2)

s=10*s+p[i][j]-′0′;

cout << s; }

该程序的输出结果是:6385

16.以下程序的输出结果是

long fun( int n)

{ long s;

if(n==1||n==2)s=2;

else s=n-fun(n-1);

return s; }

void main(){ cout << fun (3); }

1

17以下程序的输出结果是。

void fun()

{ static int a=0;

a+=2;

cout << a << " "; }

void main()

{ int cc;

for(cc=1;cc<4;cc++)

fun();

cout << endl;}

2 4 6

四、程序改错

1.下面程序定义类point,并输出其数据成员的值。根据注释写出正确的语句。

#include

class point

{

public: //正确的为private:

i nt x,y;

private: //正确的为public:

point(int xx,yy) //正确的为point(int xx,int yy)

{x=xx;y=yy; }

v oid disp()

{cout<

};

void main()

{

point p1(3,4);

cout<

}

2.下列程序定义一个时钟类,并能设置和显示时间,要求ShowTime()函数为内联函数。

#include

class Clock

{public:

void SetTime(int NewH=0,int NewM=0,int NewS);// 正确的为void SetTime(int NewH=0,int NewM=0,int NewS=0)

void ShowTime();

private:

int Hour,Minute,Second;

};

void Clock::SetTime(int NewH,int NewM,int NewS)

{Hour=NewH;Minute=NewM;Second=NewS;}

void Clock::ShowTime() //正确的为inline void Clock::ShowTime()

{ cout<

int main()

{ Clock myClock;

cout<<"First time set and output:"<

SetTime(); //正确的为myClock.SetTime();

myClock.ShowTime();

cout<<"Second time set and output:"<

SetTime(8,30,30); // 正确的为 myClock.SetTime(8;30;30);

myClock.ShowTime();

return 0;

3. 下列程序定义了一个多继承的派生类,根据注释找出错误写出正确的语句。虚基类与最派生类#include

class Vehicle

{

protected:

int weight;

public:

Vehicle(int w){weight=w;}

void show(){cout<<" class V ehicle "<

};

class Boat: public Vehicle //正确的为virtual public Vehicle

{

public:

Boat(int wb):Vehicle(wb){}

void show(){cout<<" 我能在水中游!"<

};

class Plane: public Vehicle //正确的为virtual public Vehicle

{

public:

Plane(int wp):Vehicle(wp){}

void show(){cout<<" 我能在天上飞!"<

};

class Amphibian: public Boat,public Plane

{

public:

Amphibian(int wa) :Boat(wa),Plane(wa){} //正确的为:Vehicle(wa),Boat(wa),Plane(wa){} void show(){cout<<" 我能在水中游又能在天上飞!"<

};

void main()

{

Amphibian a; //正确的为Amphibian a(2380); 实参任意正数

a.show();

}

4. 下列程序定义了运算符重载,根据注释找出错误写出正确的语句。运算符重载

#include

class M{

int a,b;

public:

M(){a=b=0;}

M(int aa,int bb){a=aa,b=bb;}

M operator + (int x); //正确的为(M &x);

M operator - (M x); //正确的为(M &x);

void OutB()

{ cout<

};

M operator +(M& x) //正确的为M M::operator +(M& x)

{ M r;

r.a=a+x.a;

r.b=b+x.b;

return r;

}

M M::operator -(M& x)

{ int r; //正确的为M r

r.a=a-x.a;

r.b=b-x.b;

return r;

}

void main()

{ M x(3,5),y(8,4),z1,z2;

z1=x+y;z2=x-y;

z1.OutB();z2.OutB();

}

5根据注释找出错误写出正确的语句

classCommonBase

{ public:

int x; };

class DeriveCommonA::public CommonBase //正确的为class DeriveCommonA:public CommonBase { public:

int y; };

classDeriveCommonB:publicCommonBase

{ public:

int z; };

classOverlapping:publicDeriveCommonA;publicDeriveCommonB//正确的为class Overlapping:public DeriveCommonA,public DeriveCommonB

{ public:

voidDisplay()

{ cout<<"Valuesare:"<

int main()

{ Overlappingov;

ov.x=1; //正确的为ov. DeriveCommonA::x=1

ov.y=2;

ov.z=3;

ov.Display();

return0; }

五、编程题

1. 编写一个程序,声明抽象基类Shape,由它派生出3个派生类:Circle(圆形)、Rectangle(矩形)、Triangle

(三角形),用一个函数printArea分别输出以上3者的面积,3个图形的数据在定义对象时给定。class Shape

{ int n;

public:

virtual double area()const=0;

};

class Circle:public Shape

{

public:

Circle(double r):radius(r){}

virtual double area()const{return 3.14159*radius*radius;}

protected:

double radius;

};

class Rectangle:public Shape

{

public:

Rectangle(double w,double h ):width(w),height(h){}

virtual double area()const{return width*height;}

protected:

double width,height;

};

class Tirangle:public Shape

{

public:

Tirangle(double w,double h ):width(w),height(h){}

virtual double area()const{return 0.5*width*height;}

protected:

double width,height;

};

void printArea(const Shape &s)

{

cout<

}

void main()

{

Circle c(10);

cout<<"圆的面积=";

printArea(c);

Rectangle r1(22,66);

cout<<"矩形面积=";

printArea(r1);

Tirangle t(23,66);

cout<<"矩形面积=";

printArea(t);

}

2、设计描述小汽车(car)、公共汽车(bus)、和卡车(truck)的系统类,提取其中的共性建立基类为抽象类,个类能分别显示不同车型的载客人数和载重量,测试这个类。

#include

#include

class Base

{public:

virtual void disp()=0;

};

class Car:public Base{

int num;

public:

Car(int n){num=n;}

void disp() {

cout<<"Car:"<

cout<<"载客人数:"<

}

};

class Bus:public Base{

int num;

public:

Bus(int n){num=n;}

void disp() {

cout<<"Bus:"<

cout<<"载客人数:"<

}

};

class Truck:public Base{

int num;

public:

Truck(int n){num=n;}

void disp(){

cout<<"Truck:"<

cout<<"载重量:"<

}

};

void main()

{

Base *p;

Car c(4);

Bus b(50);

Truck t(4000);

p=&c;

p->disp();

p=&b;

p->disp();

p=&t;

p->disp();

}

《C面向对象程序设计》谭浩强版复习总结

第一章C++ 基础 endl 换行并刷新输出流 setw(n) 设置字段位数为n hex,oct,dec 十六进制,八进制,十进制表示 setfill 定义填充字符 setprecision 定义浮点数的精度 left,right 左对齐,右对齐 showpoint 强制显示小数点以及全部尾部0 C++通过给常量命名的方式定义常量: const<数据类型名><常量名>=<表达式> 用const定义的标识符常量时,一定要对其初始化。在说明时进行初始化是对这种常量置值的唯一方法,不能用赋值运算符对这种常量进行赋值。 函数声明的一般形式为 函数类型函数名(参数表) 函数模板的定义 template 函数定义 例子:template T max(T a,T b){ return(a>b)? a:b; } 定义函数模板时可以使用多个类型参数,每个类型参数前面只需加上关键字typename或class,用逗号分隔: template

例子:template T1 max(T1 a,T2 b){ return (a>b) ? a : (T1)b; } 有默认参数的函数:实参与形参的结合是从左至右进行的,因此指定默认值的参数必须放在形参列表中的最右端 引用 定义对变量起另外一个名字(别名alias),这个名字称为该变量的引用。 <类型> &<引用变量名> = <原变量名>; 其中原变量名必须是一个已定义过的变量。如: int max ; int &refmax=max; refmax并没有重新在内存中开辟单元,只是引用max的单元。max与refmax在内存中占用同一地址,即同一地址两个名字。 对引用类型的变量,说明以下几点: 1、引用在定义的时候要初始化 2、对引用的操作就是对被引用的变量的操作。 3、引用类型变量的初始化值不能是一个常数。 4、一旦引用被声明,它就不能再指向其它的变量。 5、对引用的初始化,可以用一个变量名,也可以用另一个引用。 6、引用同变量一样有地址,可以对其地址进行操作,即将其地址赋给一指针。 当&m的前面有类型符时(如int &m),它必然是对引用的声明;如果前面无类型符(如cout<<&m),则是取变量的地址。 7、对常量(用const声明)的引用使用如下方式: int i=5; const int &a=i;

面向对象程序设计 复习资料

1.对象 (1)从概念层面讲,对象是某种拥有责任的抽象。 (2)从规格层面讲,对象是一系列可以被其他对象使用的公共接口。 (3)从语言实现层面讲,对象封装了代码和数据。 2.软件开发中的经典阶段:需求、分析、设计、规范、实现、测试、部署、维护。 3.设计7原则:开闭原则、里氏代换原则、依赖倒转原则、合成/聚合复用原则、 迪M特原则、接口隔离原则、单一职责原则。 4.面向对象的方法学:UML(统一建模语言)、RUP(统一软件开发过程)、XP(极限 编程)。 开发方法:Booch、Coad、OMT、UML、OOSE、Wirfs—Brock 5.OOA——运用面向对象方法进行需求分析。 OOD——运用面向对象方法进行系统设计。 OOP——运用面向对象方法进行程序设计。 6.OOA的基本任务:是运用面向对象的方法,对问题域和系统责任进行分析和理解,对其中的事物和它们之间的关系产生正确的认识,找出描述问题域及系统责任所需的类及对象,定义这些类和对象的属性和操作,以及它们之间所形成的结构、静态联系和动态联系。最终目的:是产生一个符合用户需求,并能够直接反映问题域和系统责任的OOA模型及其详细说明。 优点:(1)加强了对问题域和系统责任的理解。(2)改进与分析有关的各类人员之间的交流。(3)对需求的变化具有较强的适应性。(4)支持软件复用。 OOA的三大策略是:属性策略、方法策略、对象策略。 7.(1)封装:是指对象在其操作中隐藏属性。它是一种信息隐蔽技术,用户只能看见对象封装界面上的信息,对象的内部实现对用户是隐蔽的。封装的目的是使对象的使用者和生产者分开,使对象的定义和实现分开。 例如:要从同事那里借钱,在商店购买食物,就不会抢夺同事的钱包,大翻一通,看看里 面是否有足够的钱。而应该询问他们是否可以借你一些钱,他们就会自己翻钱包。 以表示圆的一个对象作为封装的例子。圆的操作应能计算出半径、直径、周长和面积。假定选择存储直径,要访问直径的程序员都会选择存储直径属性,而不是通过“获取直径”的操作来访问。如果在软件的后续版本中要存储的是半径,就必须找出系统中直接访问直径的所有代码,并更正它们,有了封装,就不会有问题。 (2)继承:可以指定类从父类中获取一些特性,再添加它自己的独特特性。继承是类间的 基本关系,它是基于层次关系的不同类共享数据和操作的一种机制。父类中定义了其所有子类的公共属性和操作,在子类中除了定义自己特有的属性和操作外,可以继承父类的属性和操作,也可以对父类中的操作重新定义其实现方法。 例如:在面向对象中,我们可以把洗衣机、电冰箱、微波炉、收音机看成是家用电气类的 子类,也可以说家用电器类是这些类的超类。家用电器类具有的属性OnOffSwitch和electricWire,具有turnOn()和turnOff()操作。因此,如果你知道某物是家用电器,那么就会立即知道它 具有家用电器类的属性和操作,这种关系就是继承。每个家用电器类的子类都继承了家用电器类的特征。同时,每个子类都增加了自己的属性和操作。 (3)多态:是指同一操作作用于不同的对象上可以有不同的解释,并产生不同的执行结果。例如:“画”操作,作用在“矩形”对象上,则在屏幕上画一个矩形;作用在“圆”对象上, 则在屏幕上画一个圆。也就是说,相同操作的消息发送给不同对象时,每个对象将根据自1 / 9

JAVA语言与面向对象程序设计课后习题答案

第1章面向对象软件开发概述 1.简述面向过程问题求解和面向对象问题求解的异同。试列举出面向对象和面向过程的编程语言各两种。 答:面向过程问题求解,以具体的解题过程为研究和实现的主体,其思维特点更接近于计算机;面向对象的问题求解,则是以“对象”为主体,“对象”是现实世界的实体或概念在计算机逻辑中的抽象表示,更接近于人的思维特点。 面向过程的编程语言:C,Pascal,Foratn。 面向对象的编程语言:C++,Java,C#。 2.简述对象、类和实体及它们之间的相互关系。尝试从日常接触到的人或物中抽象出对象的概念。 答:面向对象技术中的对象就是现实世界中某个具体的物理实体在计算机逻辑中的映射和体现。类是同种对象的集合与抽象。类是一种抽象的数据类型,它是所有具有一定共性的对象的抽象,而属于类的某一个对象则被称为是类的一个实例,是类的一次实例化的结果。如果类是抽象的概念,如“电视机”,那么对象就是某一个具体的电视机,如“我家那台电视机”。 3.对象有哪些属性?什么是状态?什么是行为?二者之间有何关系?设有对象“学生”,试为这个对象设计状态与行为。 答:对象都具有状态和行为。 对象的状态又称为对象的静态属性,主要指对象内部所包含的各种信息,也就是变量。每个对象个体都具有自己专有的内部变量,这些变量的值标明了对象所处的状态。 行为又称为对象的操作,它主要表述对象的动态属性,操作的作用是设置或改变对象的状态。 学生的状态:姓名、性别、年龄、所在学校、所在系别、通讯地址、电话号码、入学成绩等; 学生的行为:自我介绍、入学注册、选课、参加比赛等。 4.对象间有哪三种关系?对象“班级”与对象“学生”是什么关系?对象“学生”与对象“大学生”是什么关系? 答:对象间可能存在的关系有三种:包含、继承和关联。 对象“班级”与对象“学生”是包含关系。 对象“学生”与对象“大学生”是继承关系。 5.有人说“父母”和“子女”之间是继承的关系。这种说法是否正确?为什么? 答:“父母”和“子女”之间不是面向对象意义上的“继承”关系。因为这里的继承关系是“is a”的关系,“男人”与“人”之间可以说是继承关系。 6.面向对象的软件开发包括哪些过程?OOA模型包括哪三个层次?OOD模型在OOA模型的基础上引入了哪些工作? 答:面向对象的软件开发过程可以大体划分为面向对象的分析(Object Oriented analysis,OOA)、面向对象的设计(Object oriented design,OOD)、面向对象的实现(Object oriented programming,OOP)三个阶段。 面向对象的分析的主要作用是明确用户的需求,并用标准化的面向对象的模型规范地表述这一需求,最后将形成面向对象的分析模型。 面向对象的设计将在OOA模型的基础上引入界面管理、任务管理和数据管理三部分的内容。 7.面向对象的程序设计方法有哪些优点? 答:由于对象的概念能够以更接近实际问题的原貌和实质的方式来表述和处理这些问题,所以面向对象的软件开发方法比以往面向过程的方法有更好的灵活性、可重用性和可扩展性,使得上述“分析—设计—实现”的开发过程也更加高效、快捷。

面向对象程序设计教程 (马石安版)

第1章习题答案 名词解释 抽象:抽象(Abstract)就是忽略事物中与当前目标无关的非本质特征,而强调与当前目标有关的本质特征,从而找出事物的共性,并把具有共性的事物划为一类。面向对象方法中的抽象,是指对具体问题(对象)进行概括,抽出一类对象的公共性质并加以描述的过程。 封装:面向对象方法中的封装就是把将抽象出来的对象的属性和行为结合成一个独立的单位,并尽可能隐蔽对象的内部细节。 消息:消息是面向对象程序设计用来描述对象之间通信的机制。一个消息就是一个对象要求另一个对象实施某种操作的一个请求。 填空题 (1) 面向过程的结构化程序设计方法面向对象程序设计方法 (2) 顺序选择循环 (3) 程序=数据结构+算法程序=对象+消息 (4) 过程类 (5) 抽象性封装性继承性多态性 选择题 (1) B (2) C (3) D (4) C (5) D (6) A (7) A (8) B C (9) A D 判断题 (1) t (2) f (3) f (4)f (5) t (6) f (7) f (8) t 简答题 (1) 结构化程序设计方法着眼于系统要实现的功能,从系统的输入和输出出发,分析系统要做哪些事情,进而考虑如何做这些事情,自顶向下地对系统的功能进行分解,来建立系统的功能结构和相应的程序模块结构,有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。 随着程序规模与复杂性的增长,这种面向过程的结构化程序设计方法存在明显的不足之处。首先是数据安全性问题,由于数据被每个模块所共用,因此是不安全的,一旦出错,很难查明原因。其次是可维护性及可重用性差,它把数据结构和算法分离为相互独立的实体,一旦数据结构需要改变时,常常要涉及整个程序,修改工作量极大并容易产生新的错误。每一种相对于老问题的新方法都要带来额外的开销。另外,图形用户界面的应用程序,很难用过程来描述和实现,开发和维护也都很困难。 (2) 面向对象的程序设计方法中,将程序设计为一组相互协作的对象(Object)而不是一组相互协作的函数。在程序中,属性用数据表示,用来描述对象静态特征;行为用程序代码实现,用来描述对象动态特征。可见,在面向对象的程序设计方法中,对象是数据结构和算法的封装体。对象之间存在各种联系,它们之间通过消息进行通信。程序可表示为: 程序=对象+消息 在面向对象程序设计中,它着重于类的设计。类正是面向对象语言的基本程序模块,通过类的设计,来完成实体的建模任务。类通过一个简单的外部接口,与外界发生关系。一个类中的操作不会处理到另一个类中的数据,这样程序模块的独立性、数据的安全性就有了良好的保障。程序的执行取决于事件发生的顺序,由顺序产生的消息来驱动程序的执行。不必预先确定消息产生的顺序,更符合客观世界的实际。并且面向对象程序设计方法提供了软件重用、解决大问题和复杂问题的有效途径,具有抽象性、封装性、继承性和多态性等特点。

c++面向对象课程设计报告

课程设计报告 课程名称面向对象程序设计 课题名称学生成绩管理系统 专业计算机科学与技术 班级计算机 1001 学号 01 姓名 指导教师李珍辉陈淑红李杰军 2011年 12 月 28 日

湖南工程学院 课程设计任务书 课程名称面向对象程序设计 课题学生成绩管理系统 专业班级计算机1001 学生姓名 学号 01 指导老师李珍辉陈淑红李杰军 审批 任务书下达日期 2011 年 11 月 15 日 任务完成日期 2011 年 12 月 28 日

一、设计内容与设计要求 1.课程设计目的: 面向对象程序设计课程设计是集中实践性环节之一,是学习完《面向对象程序设计》课程后进行的一次全面的综合练习。要求学生达到熟练掌握C++语言的基本知识和技能;基本掌握面向对象程序设计的思想和方法;能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题,从而提高动手编程解决实际问题的能力。 2.课题题目 1)公司库存管理系统 2)高校学籍管理系统 3)高校工资管理系统 4)高校人事管理系统 5)通讯录程序设计 6)学生成绩管理系统 7) 图书管理系统 8)文本编辑器的设计与实现 9)学生考勤管理系统 10)公司人员管理系统 3.设计要求: ⑴设计课题题目:每位同学根据自己学号除以10所得的余数加1选择相 应题号的课题。随意换题者不记成绩。 ⑵根据自己对应的课题完成以下主要工作:①完成系统需求分析:包括 系统设计目的与意义;系统功能需求(系统流程图);输入输出的要求。②完 成系统总体设计:包括系统功能分析;系统功能模块划分与设计(系统功能模 块图)。③完成系统详细设计:包括数据库需求分析;数据库概念结构设计(E -R图);数据库逻辑结构设计;类层次图;界面设计与各功能模块实现。④系 统调试:调试出现的主要问题,编译语法错误及修改,重点是运行逻辑问题修 改和调整。⑤使用说明书及编程体会:说明如何使用你编写的程序,详细列出 每一步的操作步骤。⑥关键源程序(带注释)

第3章 面向对象程序设计基础

第3章面向对象程序设计基础

第3章面向对象程序设计基础 【1】什么是Java程序使用的类?什么是类库? 答:类是将一类事物的特性描述出来,然后如果用这个类来定义对象,则该对象就拥有了这个类所描述的所有特性。 在Java系统中,系统定义好的类根据实现的功能不同,可以划分成不同的集合,每个集合称为一个包,所有包合称为类库。 【2】如何定义方法?在面向对象程序设计中方法有什么作用? 答:方法的定义由两部分组成:方法声明和方法体。 方法的声明如下: 返回值类型方法名(参数类型形式参数1,参数类型形式参数2…){ 程序代码; 返回值; } 在面向对象程序设计中,方法的作用是完成对类和对象属性操作。 【3】简述构造方法的功能和特点。下面的程序片段是某学生为student类编写的构造方法,请指出其中的错误。 void Student(int no,String name) {

studentNo=no; studentName=name; return no; } 答:构造方法的功能是:构造方法是一个特殊的方法,主要用于初始化新创建的对象; 特点:构造方法的方法名要求与类名相同,用户不能直接调用,只能通过new运算符调用,而且构造方法是不返回任何数据类型,甚至也不返回void数据类型,即不能在构造方法前加void。 错误之处:(1)构造方法Student()前不能加void,(2)不能用return语句,(3)类名Student 首字母S改成小写s. 【4】定义一个表示学生的student类,包括的域有学号、姓名、性别、年龄,包括的方法有获得学号、姓名、性别、年龄及修改年龄。编写Java程序创建student类的对象及测试其方法的功能。 class Student { String id; String name; String sex; int age; void talk(){

面向对象程序设计期末综合练习一(单选题)

22. 下列的符号常量定义中,错误的定义是()。 A. const M=10; B. const int M=20; C. const char ch; D. const bool mark=true; 40. 函数重载是指()。 A. 两个或两个以上的函数取相同的函数名,但形参的个数或类型不同 B. 两个以上的函数取相同的名字和具有相同的参数个数,但形参的类型可以不同 C. 两个以上的函数名字不同,但形参的个数或类型相同 D. 两个以上的函数取相同的函数名,并且函数的返回类型相同 41. 以下关于函数模板叙述正确的是()。 A. 函数模板也是一个具体类型的函数 B. 函数模板的类型参数与函数的参数是同一个概念 C. 通过使用不同的类型参数,函数模板可以生成不同类型的函数 D. 用函数模板定义的函数没有类型 42. 下列()的调用方式是引用调用。 A. 形参和实参都是变量 B.形参是指针,实参是地址值 C. 形参是引用,实参是变量 D.形参是变量,实参是地址值

43. 为了提高程序的运行速度,可将不太复杂的功能用函数实现,此函数应选择()。 A. 内联函数 B.重载函数 C.递归函数 D.函数模板 44. 函数原型语句正确的是()。 A. int Function(void a); B.void Function (int); C. int Function(a); D.void int(double a); 45. C++中函数返回值的类型是由()决定的。 A. return语句中表达式的类型 B.该函数定义时的类型 C.调用函数时的调用语句 D.系统根据结果 56. 采用重载函数的目的是()。 A. 实现共享 B. 减少空间 C. 提高速度 D. 使用方便,提高可读性 58. 以下叙述中正确的是( )。 A. 使用#define可以为常量定义一个名字,该名字在程序中可以再赋另外的值 B. 使用const定义的常量,其值在程序运行时是不可改变的 C. 在程序中使用内联函数使程序的可读性变差 D. 在定义函数时可以在形参表的任何位置给出缺省形参值 70. 用new运算符创建一个含10个元素的一维整型数组的正确语句是( )。 A. int *p=new a[10]; B. int *p=new float[10];

《面向对象程序设计》教学大纲资料

面向对象程序设计教学大纲西北民族大学数学与计算机科学学院 制定的时间:二〇一二年五月

面向对象程序设计教学大纲 一、课程基本资料 主讲教师:曹永春、蔡正琦、顿毅杰 主教材:《C++面向对象程序设计》中国铁道出版社,陈维兴、林小茶编著,第2版,2009 辅助教材: 1.《C++编程思想》机械工业出版社,美Bruce Eckel,Chuck Alliso著,刘宗田,袁兆山,潘秋菱等译; 第1版,2011年 2. 《C++程序设计教程》机械工业出版社,美H.M.Deitel P.J.deitel 薛万鹏等译,2000年 3.《C++程序设计语言》,机械工业出版社,美Bjarne Stroustrup 著,裘宗燕译,2005年 4.《C++面向对象程序设计习题解析与上机指导》清华大学出版社,陈维兴主编,第2版,2009年 实验教材及参考书: 同上 课程性质:学科选修课 学分:4分 课时:72学时,其中理论课54学时,上机实验18学时 先修课程:计算机导论、C语言程序设计 课程结构:多媒体教学,课堂讨论、课内实验、课后作业 评价方案:(考核依据、评分的办法、权重的分布) ?平时成绩:10% 课堂表现(课堂提问、考勤、作业等) ?实验成绩:20%(实验报告、实验考试)

?期中成绩:20%(闭卷考试) .期末成绩:50%(闭卷考试) 参考书目: 名称编著者出版社出版年月《C++编程思想》刘宗田,袁兆山,潘 机械工业出版社2011年 秋菱等译 机械工业出版社2000年 《C++程序设计教程》H.M.Deitel, P.J.deitel 著,薛万鹏等译 《C++程序设计语言》Bjarne Stroustrup 机械工业出版社2005年 著,裘宗燕译 陈维兴主编清华大学出版社2009年 《C++面向对象程序设计 习题解析与上机指导》 推荐刊物: 1、《计算机学报》 2.《软件学报》 3.《程序员杂志》 4.《码农周刊》 5.《快乐码农》 相关网站: 1. 中国计算机学会https://www.docsj.com/doc/735550377.html,/sites/ccf/ 2. 计算机爱好者协会https://www.docsj.com/doc/735550377.html,/forum.php 3.C语言中文网https://www.docsj.com/doc/735550377.html,/cpp 5.中国悠悠期刊网https://www.docsj.com/doc/735550377.html,/ 6. 中国知网https://www.docsj.com/doc/735550377.html,/ 文献 1.谭浩强.C程序设计.第4版.北京:清华大学出版社,2010

C++面向对象程序设计教程第版—陈维兴林小茶课后习题答案

C++面向对象程序设计教程课后题答案 1.1 什么是面向对象程序设计? 面向对象程序设计是一种新的程序设计范型.这种范型的主要特征是: 1.3 现实世界中的对象有哪些特征?请举例说明。 现实世界中的对象具有以下特征: 1) 每一个对象必须有一个名字以区别于其他对象; 2) 用属性来描述对象的某些特征; 3) 有一组操作,每组操作决定对象的一种行为;

4) 对象的行为可以分为两类:一类是作用于自身的行为,另一类是作用于其他对象的行为。 例如一个教师是一个对象。每个教师对象有自己的名字来和别的教师区别。教师具有编号,姓名,年龄,职称,专业等属性。教师拥有走路,吃饭,授课等行为操作。走路,吃饭是作用于自身的行为,授课是作用于其他对象的行为。 1.4 什么是消息?消息具有什么性质? 操作。人们在使用洗衣机的时候只需要按下对应的按钮,而不用关心具体的内部实现。这就是封装。 1.6 什么是继承?请举例说明。 继承就是允许派生类使用基类的数据和操作,同时,派生类还可以增加新的操作和数据。

例如:哺乳动物是一种热血、有毛发、用奶哺育幼崽的动物;狗是有犬牙、食肉、特定的骨骼结构、群居的哺乳动物。狗就继承了哺乳动物。 1.7 若类之间具有继承关系,则他们之间具有什么特征? 若类之间具有继承关系,则他们之间具有下列几个特征: 1) 类间具有共享特征(包括数据和操作代码的共享); 1.10 面向对象程序设计的主要优点是什么? 1.可提高程序的重用性; 2.可控制程序的复杂性; 3.可改善程序的可维护性; 4.能够更好地支持大型程序设计; 5.增强了计算机处理信息的范围; 能够很好地适应新的硬件环境。

面向对象程序设计教程答案

面向对象程序设计教程(C++语言描述)题解与课程设计指导 第1章 面向对象程序设计概论 一、名词解释 抽象封装消息 【问题解答】 面向对象方法中的抽象是指对具体问题(对象)进行概括,抽出一类对象的公共性质并加以描述的过程。 面向对象方法中的封装就是把抽象出来的对象的属性和行为结合成一个独立的单位,并尽可能隐蔽对象的内部细节。 消息是面向对象程序设计用来描述对象之间通信的机制。一个消息就是一个对象要求另一个对象实施某种操作的一个请求。 二、填空题 (1)目前有面向过程的结构化程序设计方法和面向对象的程序设计方法两种重要的程序设计方法。 (2)结构化程序设计方法中的模块由顺序、选择和循环3种基本结构组成。(3)在结构化程序设计方法中,程序可表示为程序=数据结构+算法;而面向对象的程序设计方法,程序可表示为程序=对象+消息。

(4)结构化程序设计方法中的基本模块是过程;而面向对象程序设计方法中的基本模块是类。 (5)面向对象程序设计方法具有抽象性、封装性、继承性和多态性等特点。 三、选择题(至少选一个,可以多选) (1)面向对象程序设计着重于( B )的设计。 A. 对象 B. 类 C. 算法 D. 数据 (2)面向对象程序设计中,把对象的属性和行为组织在同一个模块内的机制叫做(C )。 A. 抽象 B. 继承 C. 封装 D. 多态 (3)在面向对象程序设计中,类通过( D )与外界发生关系。 A. 对象 B. 类 C. 消息 D. 接口 (4)面向对象程序设计中,对象与对象之间的通信机制是(C )。 A. 对象 B. 类 C. 消息 D. 接口 (5)关于C++与C语言的关系的描述中,(D )是错误的。 A. C语言是C++的一个子集 B. C语言与C++是兼容的 C. C++对C语言进行了一些改进 D. C++和C语言都是面向对象的 【结果分析】 C语言是面向过程的。C++语言是一种经过改进的更为优化的C语言,是一种混合型语言,既面向过程也面向对象。 (6)面向对象的程序设计将数据结构与( A )放在一起,作为一个相互依存、不可分割的整体来处理。

完成Java面向对象程序设计实验课的心得体会范文

Java面向对象程序设计实验课的心得体会经过这几周对Java面向对象程序设计的学习,让我更加了解到Java学习的重要性。 在实验课上,我们完成多个实验,在这个阶段的学习中,我从认识到熟悉,而后到能够自主运用。通过对Java的了解,我发现它确实有很多方便之处,它集抽象性、封装性、继承性和多态性于一体,实现了代码重用和代码扩充,提高了软件开发的效率。对于我们这个专业来说学好Java语言是很重要的,所以在实验的过程中我都尽力理解java编程思想、掌握基本技巧,尽量学到最多的知识。 学习程序设计的基本目的就是培养描述实际问题的程序化解决方案的关键技能,Java面向对象程序设计是一门实践性比较强的课程,在实际中,我们必须把理论和实践结合起来。在实验中,我们理解理论课上的知识,然后运用到实际的操作中,我们必须在现有的理论的基础上,进行实践。多次实验后,也让我看到了现在学习的一个很大弱点:只听不练,永远不会熟练运用;空记技巧,忽略思想,会在多变的习题中十分无奈。 Java思想:Java是一门面向对向语言,他定义一切都是对象面向对象,就是面对现实; 现实中的一切都是对象,他们有分类,就产生了“类”; 他们有不同,类和类之间的不同,使用类来区分; 同一个类中不同的对象的区别,使用成员区分。

所以,面向对象的内部逻辑是分类。 面向对象编程思想就象数学上的一些概念,如:空间、群、环、域等 原始的编程思想就象古典数学,人们只在一个集合上探讨问题,没有系统的方法(即运算)定义,于是仁者见仁、智者见智,这样在一定程度上造成了理论的一种混乱局面,不利于科学的发展。于是近代数学向公理化发展,这是什么意思呢?就是说,人们除了在限定论域(即上面的集合,面向对象也有此概念)外,还在此论域上加进了一套通用的、公认的运算(方法);集合加上集合上定义的运算就构成了数学上的空间、群等,在计算机领域里,就变成为“类”。这种集合上定义了操作的东西利用起来就方便多了,这使得人们讨论问题时都在给定集合的运算能力上下工夫,即有通用性可事半功倍。 面向对象的编程思想就要想近世代数的分析思想,首先要确定“论域”,即工程所涉及到的所有的“对象”,然后要分类处理,把隶属同一类别的对象集合在一起(做成一个集合),定义他们之间的运算性质及可以进行的操作,这样就构建了一个类,当然以后用到这个类的对象时都要通过已经定义了的操作来完成各项功能,这就是常要求的类的“类的成员变量要通过共有函数来操作”。 我想真正的面向对象编程思想不应该是编程思想,应该是面向对象的分析方法才对! 我的理解: 1、将分析过程为抽象的过程:简言之:分成多个小问题(组成部分),

面向对象程序设计C++课后题答案

第一章:面向对象程序设计概述 [1_1]什么是面向对象程序设计? 面向对象程序设计是一种新型的程序设计范型。这种范型的主要特征是: 程序=对象+消息。 面向对象程序的基本元素是对象,面向对象程序的主要结构特点是:第一:程序一般由类的定义和类的使用两部分组成,在主程序中定义各对象并规定它们之间传递消息的规律。第二:程序中的一切操作都是通过向对象发送消息来实现的,对象接受到消息后,启动有关方法完成相应的操作。 面向对象程序设计方法模拟人类习惯的解题方法,代表了计算机程序设计新颖的思维方式。这种方法的提出是软件开发方法的一场革命,是目前解决软件开发面临困难的最有希望、最有前途的方法之一。 [1_2]什么是类?什么是对象?对象与类的关系是什么? 在面向对象程序设计中,对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体。对象可以认为是:数据+操作 在面向对象程序设计中,类就是具有相同的数据和相同的操作的一组对象的集合,也就是说,类是对具有相同数据结构和相同操作的一类对象的描述。 类和对象之间的关系是抽象和具体的关系。类是多个对象进行综合抽象的结果,一个对象是类的一个实例。 在面向对象程序设计中,总是先声明类,再由类生成对象。类是建立对象的“摸板”,按照这个摸板所建立的一个个具体的对象,就是类的实际例子,通常称为实例。 [1_3]现实世界中的对象有哪些特征?请举例说明。 对象是现实世界中的一个实体,其具有以下一些特征: (1)每一个对象必须有一个名字以区别于其他对象。

(2)需要用属性来描述它的某些特性。 (3)有一组操作,每一个操作决定了对象的一种行为。 (4)对象的操作可以分为两类:一类是自身所承受的操作,一类是施加于其他对象的操作。例如:雇员刘名是一个对象 对象名:刘名 对象的属性: 年龄:36 生日:1966.10.1 工资:2000 部门:人事部 对象的操作:吃饭开车 [1_4]什么是消息?消息具有什么性质? 在面向对象程序设计中,一个对象向另一个对象发出的请求被称为“消息”。当对象接收到发向它的消息时,就调用有关的方法,执行相应的操作。消息是一个对象要求另一个对象执行某个操作的规格的说明,通过消息传递才能完成对象之间的相互请求或相互协作。消息具有以下3个性质: (1)同一个对象可以接收不同形式的多个消息,做出不同的响应。 (2)相同形式的消息可以传递给不同的对象,所做出的响应可以是不同的。(3)消息的发送可以不考虑具体的接收者,对象可以响应消息,也可以不响应。[1_5]什么是方法?消息和方法的关系是什么? 在面向对象程序设计中,要求某一对象作某一操作时,就向该对象发送一个响应的消息,当对象接收到发向它的消息时,就调用有关的方法,执行响应的操作。方法就是对象所能执行的操作。方法包括界面和方法体两部分。方法的界面也就是消息的模式,它给出了方法的调用协议;方法体则是实现某种操作的一系列计算步骤,也就是一段程序。在C++语言中方法是通过函数来实现的,称为成员函数。消息和方法的关系是:对象根据接收到的消息,调用相应的方法;反过来,有了方法,对象才能响应相应的消息。 [1_6]什么是封装和抽象?请举例说明。

面向对象程序设计教程答案

面向对象程序设计教程(C++吾言描述)题解与课程设计指导 面向对象程序设计概论 一、 名词解释 抽象封装消息 【问题解答】 面向对象方法中的抽象是指对具体问题(对象)进行概括,抽出一类对象的公 共性质并加以描述的过程。 面向对象方法中的封装就是把抽象出来的对象的属性和行为结合成一个独立的 单位,并尽可能隐蔽对象的内部细节。 消息是面向对象程序设计用来描述对象之间通信的机制。一个消息就是一个对 象要求另一个对象实施某种操作的一个请求。 二、 填空题 ( 1) 目前有面向过程的结构化程序设计方法和面向对象的程序设计方法两种 重要的程序设计方法。 (2) 结构化程序设计方法中的模块由顺序、选择和循环 3 种基本结构组成。 ( 3) 在结构化程序设计方法中,程序可表示为程序 =数据结构 +算法; 而面向 对象的程序设计方法,程序可表示为程序 =对象 +消息。 ( 4) 结构化程序设计方法中的基本模块是过程; 而面向对象程序设计方法 中的基本模块是类。 ( 5) 面向对象程序设计方法具有抽象性、封装性、继承性和多态性等特点。 三、 选择题(至少选一个,可以多选) ( 1) 面向对象程序设计着重于( B )的设计。 A. 对象 B. 类 C. 算法 D. 数据 ( 2) 面向对象程序设计中,把对象的属性和行为组织在同一个模块内的机制 叫做( C )。 A. 抽象 B. 继承 C. 封装 D. 多态 ( 3) 在面向对象程序设计中,类通过( D )与外界发生关系。 A. 对象 B. 类 C. 消息 D. 接口 ( 4) 面向对象程序设计中,对象与对象之间的通信机制是( C )。 A. 对象 B. 类 C. 消息 D. 接口 (5)关于C++与 C 语言的关系的描述中,(D )是错误的。 A. C 语言是C++勺一个子集 B. C 语言与C++是兼容的 C. C++对C 语言进行了一些改进 D. C++和C 语言都是面向对象的 【结果分析】 C 语言是面向过程的。C++吾言是一种经过改进的更为优化的 C 语言,是一种混 合型语言,既面向过程也面向对象。 ( 6) 面向对象的程序设计将数据结构与( A )放在一起,作为一个相互依 存、不可分割的整体来处理。 A. 算法 B. 信息 C. 数据隐藏 D. 数据抽象 第1

面向对象程序设计完整版

Object- Orien ted Programmi ng C++ 主讲成长生 东华大学计算机科学与技术学院

第一章概述 § 1.1 面向对象程序设计的基本思想 C++是基于C语言发展的,又冲破C语言局限的面向对象的程序设计语言。它与Java 语言都作为当前计算机科学的主流语言, 越来越受到用户的欢迎。 要弄清楚什么是面向对象的程序设计, 首先了解和回顾传统的 ( Pascal(或C))结构化程序设计方法及其设计思想、程序结构及特点。SP(Structure Programming)是60 年代诞生的针对当时爆发的所谓”软件危机” , 为此发展形成了现代软件工程学的基础。 SP的总的设计思想是: . 自顶向下、层次化 . 逐步求精、精细化 程序结构是按功能划分基本模块的树型结构, 使模块间的关系尽可能简单独立。因此SP的程序的基本特点是: . 按层次组织模块(战略上划分战役) . 每一模块只有一个入口, 一个出口 ?代码和数据分离(程序=数据结构+算法) 归纳得到: SP 把数据和过程(代码、函数)分离为相互独立的实体, 用数据代表问题空间中的客体借以表示实际问题中的信 息; 程序代码则用来处理加工这些数据。程序员在编程时 必须时刻考虑所要处理的数据结构和类型。对不同的数据格式即使要作同样

的处理计算, 或者要对相同的数据格式作不同的处理都必须编写不同的程序(如两个整型数和两个浮点数相加)。这样的编程方法,即传统的SP方法设计出来的程序或系统其可重用的成分很少。其次把数据和代码作为不同的分离实体时, 总存在着用错误的数据调用正确的程序模块, 或用正确的数据调用错误的程序模块的危险, 从而使数据与程序始终保持兼容, 已成为程序员 的一个沉重的负担。在开发一个大型软件课题中, 当工程进入到 后期若用户改变了方案要求, 很容易使技术人员的前期工作受到摧毁性的打击,使其前功尽弃。为克服以上的弊端或者该SP方法难以控制处理的矛盾而产生了面向对象程序设计方法, 即Object —Oriented Programming ----------- OOP从二十世纪六十年代提出对象 的雏形, 到七十年代美国国防部的专用语言Ada 语言, 直到当前国际上流行的高品味的Java 和C++(Tc++,Balandc++ 及Vc++), , 应该讲OOP方法与技术吸取了SP的一切优点,同时又正视和顺应现实世界由物质和意识二部分组成。映射到面向对象的解空间就是: 具体事物—对象; 抽象概念—类。 OOP的基本原理是用问题领域的模型来模拟大千世界,从而设计出尽可能直接、自然地表示问题求解方法的软件, 这样的软件由对象组成, 而对象则是完整反映客观世界事物具有不可分割的静态属性(”数据结构” )与动态行为(”方法” )的。而且它们是既有联系又

面向对象程序设计基本概念

面向对象程序设计基本概念 面向对象设计是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,是建立在“对象”概念基础上的方法学。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。 对象:对象是要研究的任何事物。从一本书到一家图书馆,单的整数到整数列庞大的数据库、极其复杂的自动化工厂、航天飞机都可看作对象,它不仅能表示有形的实体,也能表示无形的(抽象的)规则、计划或事件。对象由数据(描述事物的属性)和作用于数据的操作(体现事物的行为)构成一独立整体。从程序设计者来看,对象是一个程序模块,从用户来看,对象为他们提供所希望的行为。 类:类是对象的模板。即类是对一组有相同数据和相同操作的对象的定义,一个类所包含的方法和数据描述一组对象的共同属性和行为。类是在对象之上的抽象,对象则是类的具体化,是类的实例。类可有其子类,也可有其它类,形成类层次结构。 消息:消息是对象之间进行通信的一种规格说明。一般它由三部分组成:接收消息的对象、消息名及实际变元。 面向对象主要特征: 封装性:封装是一种信息隐蔽技术,它体现于类的说明,是对象的重要特性。封装使数据和加工该数据的方法(函数)封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性(对象能接受哪些消息,具有那些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。封装的目的在于把对象的设计者和对象者的使用分开,使用者不必知晓行为实现的细节,只须用设计者提供的消息来访问该对象。 继承性:继承性是子类自动共享父类之间数据和方法的机制。它由类的派生功能体现。一个类直接继承其它类的全部描述,同时可修改和扩充。继承具有传递性。继承分为单继承(一个子类只有一父类)和多重继承(一个类有多个父类)。类的对象是各自封闭的,如果没继承性机制,则类对象中数据、方法就会出现大量重复。继承不仅支持系统的可重用性,而且还促进系统的可扩充性。 多态性:对象根据所接收的消息而做出动作。同一消息为不同的对象接受时可产生完全不同的行动,这种现象称为多态性。利用多态性用户可发送一个通用的信息,而将所有的实现细节都留给接受消息的对象自行决定,如是,同一消息即可调用不同的方法。例如:Print消息被发送给一图或表时调用的打印方法与将同样的Print消息发送给一正文文件而调用的打印方法会完全不同。多态性的实现受到继承性的支持,利用类继承的层次关系,把具有通用功能的协议存放在类层次中尽可能高的地方,而将实现这一功能的不同方法置于较低层次,这样,在这些低层次上生成的对象就能给通用消息以不同的响应。在OOPL中可通过在派生类中重定义基类函数(定义为重载函数或虚函数)来实现多态性。

面向对象程序设计概述

1.什么是结构化程序设计方法?这种方法有哪些优点和缺点? 【解答】结构化程序设计方法是指20世纪60年代开始出现的高级语言程序设计方法,由于采用了数据结构化、语句结构化、数据抽象和过程抽象等概念,使程序设计在符合客观事物与逻辑的基础上更进了一步。结构化程序设计的思路是:自顶向下、逐步求精。程序结构由具有一定功能的若干独立的基本模块(单元)组成,各模块之间形成一个树状结构,模块之间的关系比较简单,其功能相对独立,模块化通过子程序的方式实现。结构化程序设计方法使高级语言程序设计开始变得普及,并促进了计算机技术的深入应用。 虽然结构化程序设计方法采用了功能抽象、模块分解与组合,以及自顶向下、逐步求精的方法,能有效地将各种复杂的任务分解为一系列相对容易实现的子任务,有利于软件开发和维护;但与面向对象程序设计方法相比,结构化程序设计存在的主要问题是,程序的数据和对数据的操作相互分离,若数据结构改变,程序的大部分甚至所有相关的处理过程都要进行修改。因此,对于开发大型程序具有一定的难度,软件的可重用性差,维护工作量大,不完全符合人类认识世界的客观规律。 2.面向对象程序设计有哪些重要特点? 【解答】软件设计的目的是为了解决日常生活中存在的各种实际问题,面向对象程序设计与以往各种程序设计方法的根本区别是程序设计的思维方法的不同。它主要具有如下重要特点: (1)面向对象程序设计实现了较直接地描述客观世界中存在的事物(即对象)及事物之间的相互关系,它所强调的基本原则是直接面对客观事物本身进行抽象,并在此基础上进行软件开发,将人类的思维方式与表达方式直接应用在软件设计中。 (2)面向对象的程序设计将客观事物看作具有属性和行为的对象,通过对客观事物进行抽象来寻找同一类对象的共同属性(静态特征)和行为(动态特征),并在此基础上形成类。 (3)面向对象的程序设计将数据和对数据的操作封装在一起,提高了数据的安全性和隐蔽性。

《面向对象程序设计》课程设计报告模板

课程设计 20 ~ 20 学年第学期 设计题目职工工资管理系统设计 院(系)计算机科学与信息工程学院 专业 班级学号 学生姓名 设计时间20 年 1 月日——2011 年 1 月日 指导教师 提交日期 20 年月日

上海应用技术学院课程设计任务书

目录 1概述: .................................................................................. 错误!未定义书签。 1.1基本功能 (5) 1.2拓展功能: (6) 2课题分析 (7) 2.1类的设计 (7) 2.2类的实现 (8) 3详细设计说明 (9) 3.1程序主界面 (9) 3.2方案 (9) 3.3程序描述(输入INPUT) (9) 3.4 运行结果............................................................11 4课程设计总结 (12) 5软件使用说明 (13) 6附录(参考文献,原代码:) (13) 参考文献:................................................ 错误!未定义书签。原代码 ................................................... 错误!未定义书签。

1概述: 课程设计目的 本课程设计是《面向对象程序设计》课程的后继教学环节,学好C++语言就必须坚持用面向对象的思维方式分析问题、解决问题,最好的方法是仿照教材编写C++实际应用程序。 根据教材中人事管理应用程序框架,在此基础上按要求完成以下实际应用程序。 1.1基本功能 1.1.1输入员工信息 输入员工信息包括以下几个信息点 员工姓名 员工编号(4位数) 员工职务类型(1.技术经理2. 销售经理3. 技术人员4. 销售人员5. 文秘.) 输入后将自动保存至info.txt文件中。 在每次输入的时候均判断输入的合法性。 1.1.2计算员工工资 让用户输入要计算的员工姓名,然后根据不同的计算方式进行计算,具体计算方法为 1. 技术经理有6000元的固定工资,工作业绩可分为3个等级,每级可获得1000元奖金, 2. 销售经理有6000元的固定工资,奖金由他所管理的销售员的销售业绩而定,总销售额的2% 3.技术人员的工资根据他当月工作的小时数来定,时薪35元; 4. 销售人员的工资则是根据本人当月销售额来确定,工资为销售额的5%; 5. 文秘有4000元的基本工资,奖金视为当月工作情况而定; 提示是否需要存档 如果需要存档,则提示记录的月份,需要用户输入 在每次输入的时候均判断输入的合法性。

相关文档
相关文档 最新文档