windows编程实验二

          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类同是如此。

  




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值