windows编程实验二

    xiaoxiao2021-03-25  114

              1.在c++中,经常会使用#include<>或者#include" "来包含某些头文件,这样做减少了代码的重复冗杂,是非常方便的,但是,不了解其中的奥秘的话,也是非常容易出错的。所以我们就需要了解两者不同调用的相同点和区别了。

             相同:这种使用方法是在编译前将头文件包含到.cpp文件里面,

          区别:    #include<file>  : 编译程序会先到标准函数库中找文件,即先到缺省路径下寻找,再到当前目录下寻找。

                       #include"file"      :  编译程序会先在当前目录下寻找该文件,若未找到,则在标准库中寻找。

             2.在c++中,经常会使用using namespace std,这句话有什么用呢?没用不会写上面的,这是指的使用标准命名空间,std是空间名。c语言中,<iostream.h>调用了标准库函数,是使用了全局的命名空间,所以不需要定义,也就是早期的c++,但是现在c++中使用<iostream>的时候,头文件中没有定义全局命名空间所以要使用自己定义的命名空间,而namespace std 就是微软帮你定义好的一个命名空间,直接using就可以了。使用该命名空间时,也就可以调用空间中的库函数,下面是一个小例子来解释它:

    //声明                        #include"iostream" using namespace std; namespace //定义一个名test的空 test { void Display() //其中包含库函数Display() { cout<<"Hello World!!!"<<endl; } } //调用 #include"stdafx.h" //头文件预编译 #include"Display.h" //调用头文件 using namespace test; //使用新定义的命名空间 int main(int argc, _TCHAR* argv[]) { Display(); //主函数中调用库函数 return 0; }        3.当进行两个类的强耦合是,#include"file"容易出错,这时候就需前置声明。就像下面的例子一样:

             // A.h   #include "B.h"   class A   {       B b;   public:       A(void);       virtual ~A(void);   };     //A.cpp   #include "A.h"   A::A(void)   {   }       A::~A(void)   {   }     // B.h   #include "A.h"   class B   {       A a;   public:       B(void);       ~B(void);   };     // B.cpp   #include "B.h"   B::B(void)   {   }       B::~B(void)   {   }  

        当在编译A.cpp时,系统会先去找到A.h,一起包含道文件中,再进行编译,但是在编译A.h的时候,又需要先去编译B.h,编译B.h的时候,又需要去编译A.h,显然程序陷入了死循环,编译自然不能通过。当我们进行前置声明时,代码就变成下面这样了:

    // A.h   class B;   class A   {       B* b;   public:       A(void);       virtual ~A(void);   };     //A.cpp   #include "B.h"   #include "A.h"   A::A(void)   {       b = new B;   }       A::~A(void)   {   }     // B.h   class A;   class B   {       A a;   public:       B(void);       ~B(void);   };     // B.cpp   #include "A.h"   #include "B.h"   B::B(void)   {       a = New A;   }       B::~B(void)   {   }

          前置声明,就是在声明定义一个A类的时候,需要使用另一个B类,我们就可以先声明一个B类,而不去具体定义它,只用编译前让编译器知道有这么一个类,等到实现A类的时候,再用指针使用B类,实例化对象,调用A类方法。B类同是如此。

      

    转载请注明原文地址: https://ju.6miu.com/read-22209.html

    最新回复(0)