2019.3.2学习总结 全局变量 类前声明

Qt相关的总结:

1.Slots也是普通的c++方法,它们可以是virtual;可以被重载;
可以使private、protected、public,可以像其它c++方法一样有各种类型的参数。
它们唯一的区别就是signal与slot是相互链接起来的,slot函数在每次signal函数被emit时会被调用。
2.声明一个信号要使用signals关键字,signals前面不可加public、private和protected进行修饰,因为只有定义该信号的类及其子类才可以发射该信号;声明一个槽需要使用slots关键字,一个槽可以是private、public或者protected类型的,槽也可以被声明为虚函数,这与普通的成员函数是一样的,也可以像调用一个普通函数一样来调用槽。槽的最大特点就是可以和信号关联。
3.信号的声明是在头文件中进行的,QT的signals关键字指出进入了信号声明区,随后即可声明自己的信号。例如,下面定义了三个信号: 
signals: 
void mySignal(); 
void mySignal(int x); 
void mySignalParam(int x,int y); 
4.从形式上讲信号的声明和普通的C++函数是相同的,不过信号却没有函数体定义,另外,信号的返回类型都是void,不要指望能从信号返回什么有用信息。 信号由moc自动产生,他们不应该在.cpp文件中实现。 
5.
需要继承自QObject或其子类;
在类声明的最开始处添加Q_OBJECT宏;
槽中的参数的类型要和信号的参数的类型相对应,且不能比信号的参数多;
信号只用声明,没有定义,且返回值为void类型。
在Qt实际编程时,最好确保工程中每个信号都至少有一个槽函数与之相连接,即不存在无用信号;并且确保工程中每个槽函数都在cpp中实现。

C++相关:

现有两个文件Test.h 和Test.cpp
 #include <iostream>在Test.h中包含 和在Test.cpp中包含有什么区别?
1、在cpp文件中包含.h文件,要么你要用到这个头文件中的函数或者类,要么就是实现这个头文件;
2、.h ---就是为了放一堆声明所产生的东西。
如果是定义放在.h中。     如果.h被重复包含多次,那么则会被报重定义。所以在.h 中都要---如果函数就要是inline ,如果是变量就要 selectany (windows)才不会被报错。

3、#include尽量写到cpp文件里。两个文件在.h文件里相互include,就会产生编译错误,而两个文件在.c文件互相include,就不会有该问题,因此在.h文件include就要避免互相包含的问题,而.cpp文件就不需要考虑
4、1)在 .h 里面 include 的好处是:
如果很多.c,.cpp文件,都包含一批头文件,
如果复制很容易遗漏
如果输入,很容易出错

如果全部在一个.h, include  那么每个.c,.cpp文件只需要一个#include 语句
这样不仅输入量减少,
而且代码也美观多了
代码也主次分明了
毕竟,.c.cpp, 里面
要实现的函数,才是主要代码


2)主要缺陷,
可能会包含完全不需要的头文件,
增加编译工作量
5、如果你在a.h头文件中include了“stdio.h”,“iostream”,……一大堆
那么你的a.cpp源文件只要include你的a.h,就相当于include了“stdio.h”,“iostream”,……一大堆
但是当其他文件include你的a.h的同时也就包含了“stdio.h”,“iostream”,……一大堆

这个要看你个人需要,如果你需要让其他文件也include一大堆,那么写在a.h中就可以,其他文件包含a.cpp简单整洁无脑
如果只有a.cpp需要include一大堆,那么还是建议在a.cpp中include一大堆
6、如果a.c包含了头文件a.h,a.h包含了头文件b.h,b.c也包含了b.h,那么当b.h发生改变时,a.c和b.c都会重新编译
也就是所有包含了b.h的都会重新编译,无论是直接包含,还是间接包含
7、2点原则:
第一个原则:如果可以不包含头文件,那就不要包含了,这时候前置声明可以解决问题。如果使用的仅仅是一个类的指针,没有使用这个类的具体对象(非指针),也没有访问到类的具体成员,那么前置声明就可以了。因为指针这一数据类型的大小是特定的,编译器可以获知(C++编译器自上而下编译源文件的时候,对每一个数据的定义,总是需要知道定义的数据的类型的大小) 第二个原则:尽量在CPP文件中包含头文件,而非在头文件中。假设类A的一个成员是是一个指向类B的指针,在类A的头文件中使用了类 B的前置声明并编译成功,那么在A的实现中我们需要访问B的具体成员,因此需要包含头文件,那么我们应该在类A的实现部分(CPP文件)包含类B的头文件而非声明部分(H文件)
5.全局变量声明的办法
①处于尽可能的改动较少的文件的文件的原则,自己写一个头问价,文件内容就一条:全局变量的定义。这样的话,在需要使用的位置通过include这个头文件就可以了。但是,如果有多个源文件需要使用使用这个变量的话,这种情况也会发生重复定义的错误,因为include的过程就是复制的过程,那么很显然了,这个头文件被拷贝到了多个源文件中,链接时肯定会出现重复定义的错误啊。

而且,假设只有一个源文件需要这个全局变量,那么直接在这个源文件中定义全局变量就好了啊!还定义什么鬼头文件哦!

②假设工程中的多个源文件需要这个全局变量,那么你就任找一个源文件,把这个全局变量定义到这个源文件中,然后新建一个头文件,在里面进行extern?这个变量的声明,最后在需要使用这个全局变量的源文件中include你新建的头文件就OK了。
声明完之后使用的时候需要带上其属于哪一个类的。比如:qDebug()<<First::a;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Node.js 中,有两种声明全局变量的方法: 1. 使用 `global` 对象 你可以使用 `global` 对象来声明全局变量。在 Node.js 中,所有的全局变量都是 `global` 对象的属性。例如: ``` global.a = 1; console.log(a); // 1 ``` 注意:在模块中声明的变量不会自动成为全局变量。你必须使用 `global` 对象来声明全局变量。 2. 使用 `globalThis` 对象 在 ECMAScript 2020 中,新增了一个全局对象 `globalThis`,它可以在所有的 JavaScript 环境中使用,包括浏览器和 Node.js。你可以使用 `globalThis` 对象来声明全局变量,例如: ``` globalThis.a = 1; console.log(a); // 1 ``` 注意:`globalThis` 对象在 Node.js 12.0 及更高版本中支持。 总结:在 Node.js 中,你可以使用 `global` 或 `globalThis` 对象来声明全局变量。 ### 回答2: 在Node.JS中,可以使用global对象来声明全局变量。global对象是Node.JS的全局对象,可以在应用程序的任何地方访问。 要声明一个全局变量,可以使用global关键字来设置变量的值。例如,要声明一个名为globalVar的全局变量,并将其值设置为10,可以使用以下代码: global.globalVar = 10; 这样,globalVar变量就可以在应用程序的任何文件或模块中使用,无需再额外声明或引入。 同时,也可以使用global关键字来访问和修改已经存在的全局变量。例如,已经存在一个名为globalVar的全局变量,想要将其值改为20,可以使用以下代码: globalVar = 20; 需要注意的是,使用全局变量可能会导致命名冲突和代码维护上的困难。因此,应尽量避免过多地使用全局变量,而是使用模块导出和引入的方式来实现变量的共享和访问。只有在确实需要在整个应用程序中共享变量的情况下,才考虑使用全局变量总结来说,Node.JS中可以使用global对象来声明和访问全局变量,但应慎重使用,避免出现命名冲突和维护困难的问题。 ### 回答3: 在Node.js中,可以通过两种方式声明全局变量。 第一种方式是使用global对象。global对象在Node.js中是一个全局变量,可以在任何地方访问。我们可以直接给global对象添加属性来声明全局变量,例如: ``` global.myVariable = 5; ``` 这样,myVariable变量就成为了一个全局变量,在任何地方都可以访问和使用。 第二种方式是使用global关键字。在Node.js的模块中,可以使用global关键字定义一个全局变量,使其在整个应用程序范围内可用。例如,在一个模块中声明一个全局变量可以这样: ``` global.myVariable = 10; ``` 然后,在其他模块中也可以直接访问和使用这个全局变量。 需要注意的是,尽量避免滥用全局变量,因为过多的全局变量会增加代码的复杂性和耦合性,不利于代码的维护和重构。在开发过程中,应该优先考虑使用局部变量和模块间的数据传递来实现功能。只在有必要的情况下使用全局变量

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值