(课本《c++面向对象程序设计》黄宝贵老师主编)
壹.判断题:
4.析构函数的作用主要是释放对象占用的资源。正确;(如果在对象消亡之前希望程序做一些事情,如清理资源、计算当前活跃对象的数目等,程序员需要显式地定义析构函数,以完成相关操作。《课本3.5析构函数》)
5.系统预定义 (4条消息) c++预定义_David_Yang的博客-CSDN博客
6.7、C++对象数组与对象指针 - 心田居士 - 博客园 (cnblogs.com)
①point (*p)[3];p是指向长度为3的一维对象数组的指针(简称数组指针),()优先级最高,因此(*p)是指针;
②point *p[3];p是长度为3的指针数组,p是数组名,先执行p[3](指针数组);
point是类名,考虑优先级
9.静态数据成员(变量、常量)不能在类中初始化,使用时需要在类体外声明。正确;变量静态数据成员的初始化工作必须在类外完成,常量(const)静态数据成员如果是整型,枚举型的初始化工作可以在类内完成,用inline声明的没区别。
10.一经赋值,不能修改,不同的对象其常数据成员的值可以不同6.3.1-3 常成员、静态成员、友元_Conor L的博客-CSDN博客
12.常对象只能调用常函数成员 c++_Zetaa的博客-CSDN博客_常对象只能调用常成员函数
贰。选择题:
4.假如有以下类A:
classA{
public:
int func(int a){return a*a;)
};
以下程序片段中不正确的是( ) A.A a;a.func(5); B.A*p=new A; p->func(5); C.A a; A& r=a;r.func(5); D.A a,b; if(a!=b) a.func(5); //类的实例化问题:问题创建一个名为A的类,类中只有一个是公有成员的成员函数,输入一个整数,返回该整数的平方;
A.实例化一个名为a的对象【课本第68页,对象名.成员函数名()】;
B.声明一个类型为类的指针p,用new申请一块类型为A的内存,【课本第37页,格式一:类型说明符*指针变量 = new 类型说明符;格式二:类型说明符* 指针变量 = new 类型说明符[数组长度]】,此处p的用法类似于指针用法;【课本第69页,this指针是指向当前对象的指针,所以可以在函数中把this指针用作参数;或从函数中返回,】等价于(*p).func(5)
C.首先实例化一个名为a的对象,然后运用引用运算符&【课本第42页,声明左值引用,类型说明符 & 引用名 = 目标变量名,声明引用时,必须同时对其进行初始化】
D.呜呜呜,我真找不到,反正这个就是错了 >_<,没有进行关系运算符重载
10.在下面类声明中,关于生成对象不正确的是( )。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)}; //BCD都编译出错, C没有自定义无参构造函数,用new申请两块point类型的对象,当没有说明参数,需定义默认构造函数
使用new申请新空间,类后面的括号_wanghua609的博客-CSDN博客
new一个类对象和使用类名创建一个对象有什么区别?该怎么解决_共勉的博客-CSDN博客
叁、吧唧吧唧:
1.class 和struct一样都可以只编程public和private中的一个,也可以都不写,class默认为private,struct 默认是public,我们老师建议使用class,为了养成良好的编程习惯
2.class A{};A a ;cout << &a;输出变量a的地址,如果是cout <<a;输出错误,private中不能在类外访问,如果是public中的数据成员,用“cout << a. 数据成员名;”,cout <<a会出现编译错误;才可以访问;cout << A和 cout << &A都不可以访问输出A的地址,那么怎么在screen显示A的地址,下一章,运算符重载;
3.两个类相互包含引用问题:①一般不能出现类A用类B声明数据成员,类B用类A声明数据成员;
4.所有数据成员都已 d_ 前缀开头,但是静态成员以 s_ 前缀开始;
5.静态数据成员的声明格式如下:static 类型说明符 对象名;那么类型可以为类吗,即,static 类名 对象名?,const也可以吗
6.必须通过构造函数的参数列表初始化方式进行初始化,不能在构造函数的函数体内用赋值语句初始化:①常数据成员的初始化(或在类中初始化常数据成员);