1.描述面向对象技术的基本概念
面向对象是人们认识客观世界的系统思维方式,采用基于对象(实体)的概念建立模型,模拟客观世界分析,设计,实现软件的方法,包括类,对象,消息以及类的特性等方面的内容。
2.C++与C语言相比的改进
C++是从C语言发展演变的。C语言是过程式编程语言,它以过程为中心,以算法为驱动。而C++能够使用面向对象的编程方式,即使用以面向对象为中心,以消息为驱动的编程方式。这是C++在C语言上面的最大改进。
3.class和struct有什么区别
分为以下两种情况:
C语言的struct与C++的class的区别:struct只是作为一种复杂数据类型定义,不能用于面向对象编程;
C++中的struct与class的区别:对于成员访问权限以及继承方式,class中默认的是private的,而struct中则是public的。class还可以用于表示模板类型,struct则不行。
4.改错——C++类对象的声明
struct Test
{
Test(int){}
Test(){}
void fun(){}
};
void main(void)
{
Test a();
a.fun();
Test b();
b.fun();
}
题中的Test有两个构造函数,其中一个是带参数的,而另一个是不带参数的。在调用不带参数的构造函数时不需要加小括号,因此代码第12行是错误的。应该改成:
Test b;//去掉小括号
5.看代码写结果——C++类成员的访问
(类对象的私有成员函数不能用对象访问)
#define public private //(1)
class Animal
{
public : //(2)
void MakeNoise();
};
int main(void)
{
Animal animal;
animal.MAkeNoise();//(3)
return ;
}
(1)正确。把public宏定义为private;
(2)正确。定义public成员。注意,由于public已经被定义为private,因此这里的MakeNoise()成员函数实际上是private。
(3)错误。调用Animal对象的私有成员函数。
6.找错——类成员的初始化
#include<iostream>
using namespace std;
class Obj{
public :
Obj(int k):j(k),i(j);
{
}
void printf(void)
{
cout<<i<<endl<<j<<endl;
}
private:
int i;
int j;
};
int main(int argc,char *argv[])
{
Obj obj();
obj.print();
return ;
}
本题考查的是初始化列表方面的知识。这里很容易让人以为先用2对j进行初始化,然后用j对i进行初始化,那么i和j都是2.
实际上,初始化的顺序正好与想象的相反。初始化列表的初始化顺序与变量声明的顺序一致,而不是按照出现在初始化列表中的顺序。这里的成员i比成员j先声明,因此正确的顺序是先用j对i进行初始化,然后用2对j进行初始化。由于在对i进行初始化时j尚未被初始化,j的值为随机值,故i的值也为随机值;然后用2对j进行初始化,j的值为2.
7.静态成员变量的使用(看代码,写结果)
#include<iostream>
using namespace std;
class Myclass
{
public :
Myclass(int a,int b,int c);
void GetNumber();
void GetSum();
private:
int A;
int B;
int C;
int Num;
static int Sum;
};
int Myclass::Sum=;
Myclass::Myclass(int a,int b,int c)
{
A=a;
B=b;
C=c;
Num=A+B+C;
Sum=A+B+C;
}
void Myclass::GetNumber()
{
cout<<"Number="<<Num<<endl;
}
void Myclass::GetSum()
{
cout<<"Sum="<<Sum<<endl;
}
void main()
{
Myclass M(,,),N(,,);
M.GetNumber();
N.GetNumber();
M.GetSum();
N.GetSum();
}
本题考查的是静态成员与非静态成员的区别。静态成员被当作该类类型的全局变量。对于非静态成员,每个类对象都有自己的复制品,而静态成员对每个类的类型只有一个复制品。静态成员只有一份,由该类类型的所有对象共享访问。
MyClass类中有GetNumber()和GetSum()两种方法,它们分别输出成员变量Num和Sum的值。main函数中定义了两个Myclass的对象,并调用它们的GetNumber()和GetSum()方法。
Num成员为普通类型,它为Myclass类的对象所有。因为两次打印的值不一样。
Sum成员为静态类型,它为Myclass类所有,被Myclass类的所有对象共享。因此,两次打印出来的值是相同的。
答案如下:
Number=20
Number=34
Sum=34
Sum=34
8.与全局对象相比,使用静态数据成员有什么优势
优势如下:*1.静态数据成员没有进入程序的全局名字空间,因此不存在程序中其他全局名字冲突的可能性;
*2.使用静态数据成员可以隐藏信息。因此静态成员可以是private成员,而全局对象不能。