c语言防止标识符同名冲突的方式:
- 函数写在不同.c文件内
c++用命名空间来进一步防止同名冲突的3种方式:
- 函数写在不同.c文件内
- 不同的类里
- 写在不同的命名空间namespace里
命名空间定义:
namespace Ui {
class MainWindow; //命名空间内可以放变量,函数,结构体,类等等
}
外部使用MainWindow类两种方式:
- Ui::MainWindow方式。
- 在使用者源码文件开头,using namespace Ui;,这样就可以直接使用该命名空间 Ui 中的内容了,MainWindow m;比如使用c++自带标准库(这些库默认被开发者写在命名空间std内),则在编程开头就写一句,using namespace std;这样就可以直接使用库里的类了。
qt中,默认建立的窗口应用程序,主界面是MainWindow类,同时默认继承了两个类(c++支持多继承,java等语言不支持)。
Ui_MainWindow类负责界面的创建(比如拖拽了一个按钮,在这里面new反映出来,这个是qt自动生成的),这个类自动被写在了Ui命名空间里,手动修改了,下次还是自动被写进去。
namespace Ui {
class MainWindow: public Ui_MainWindow {}; //这里是把MainWindow类写在了Ui命名空间里
} // namespace Ui
QMainWindow类负责界面的事件响应和处理(比如鼠标点击事件等)
namespace Ui {
class MainWindow; //这里还是把MainWindow类写在了Ui命名空间里,因为不支持一个类属于两个命名空间,否则会报错
}
class MainWindow : public QMainWindow
{
......
}
提醒:一个类在继承的时候只能写在某个命名空间里,在另外一个地方继承时,还是只能写在当初那个命名空间里(即一个类不能同时出现在两个命名空间内),否则报错。
qt中继承的界面类会自动生成然后继承给MainWindow,且自动写在Ui命名空间里,因此多个应用程序想包含在一个工程里(大家都在Ui命名空间内),因为外部仅仅修改一下命名空间名字,但是下次又会自动生成为同名命名空间内,就会造成类名冲突的(默认主界面类名都是MainWindow,除非自己一个个修改,那就可以)。