C++学习(50)

来源:互联网 发布:淘宝电子洋垃圾 编辑:程序博客网 时间:2024/04/28 08:20

1.  程序开发过程:编辑、编译预处理、编译、连接、运行。

2.  比较 #includefile.hVS.  #include<file.h>


当用#include“file.h”时,先搜索当前工作目录,如果没有,再去搜索标准库,库没有再搜索资源库;

当用#include<file.h>时,编译器先从标准库开始搜索,如果没再搜索资源库目录,若还未找到则搜索当前工作目录。

题中的两种方式都会找到stdio.h(存在于标准库),通过<>,(库里)一步就找到了。

两者在程序的执行速度上一样,但是在编译速度上不同。

 

3.  友元能够通过类的对象访问类的所有成员。(正确)

(友元相当于在一个盒子上开了一个洞,既然一个盒子有洞,那么你就可以拿出这个箱子的任何东西。)

 

4.  C++的虚函数必须是类的一个成员,而不允许是类的友元。

 

5. 调用拷贝构造函数的3情况:

1)、用一个对象去初始化同一个类的另一个新对象时; 

2)、函数的形参对象,调用函数进行形参和实参结合;

3)、函数的返回值是类的对象,函数执行返回调用时 将一个对象赋值给另一个对象,两个对象都存在,调用的是赋值构造函数,不涉及内存的分配。 当被赋值的对象不存在调用的是拷贝构造函数;

 

6.  分析下列程序,则构造函数中,成员变量一定要通过初始化列表初始化的是:bc

class A{      ...      private:           int &a;};class B:public A{      ...      private:           int a;      public:           const int b;           A c;           static const char *d;           A* e;      };


分析一:需要初始化列表的三种:引用、const和没有默认构造函数的成员对象

c需要初始化不是因为它的成员有引用,而是因为类A中没有合适的构造函数。

d,底层const,允许改变d的值,亦可不必初始化。

e,指向的东西是可变的,只要满足类A中要求即可。指针与引用的区别,定义一个引用时候必须要初始化,而且不能改变。定义一个指针时候,不用初始化,还可以更改指向。

 

const、引用在初始化列表中初始化。static在类外初始化。 普通变量可以在初始化列表也可以在构造函数里面赋值

 

分析二:常量成员和引用成员自然是要初始化的,问题就在这static成员。 static成员是不允许在类内初始化的,除了const,那么static const 成员是不是在初始化列表中呢? 答案是NO

 

一是static属于类,它在未实例化的时候就已经存在了,而构造函数的初始化列表,只有在实例化的时候才执行

二是static成员不属于对象。我们在调用构造函数自然是创建对象,一个跟对象没直接关系的成员要它做什么呢。

 

还有一个问题就是上面那个仁兄说的,需要初始化的数据成员是对象(继承时调用基类构造函数) ;这个显然是不对的。下面代码能够很好说明了这个问题。c需要初始化不是因为它是类对象,是因为他的成员有引用。

class A { private:   int a; };class B : public A{private:          int aa;public: B(int i ):aa(i),b(9){};     const int b;    A c;};


 

 

原创粉丝点击