C++模块化编程

C++程序模块化编程

1、.h文件中定义类(对成员函数只包括声明部分),对应的.cpp文件主要是对类的成员函数的定义。

2、main函数中定义对象,然后通过对象引用类的成员以实现某功能。

3、将头文件添加到.cpp文件比添加到.h文件的好处是可以避免重复包含,如果不是头文件要用到某文件的内容的话,还是把.h文件放到.cpp中更好

4、也可以某个类在自己的cpp文件中定义全局对象(变量),然后在对应.h文件中把它声明为外部的,如直接在.h文件中定义的话,该头文件被不同文件包含时会报重定义的错误。(好像可以通过静态数据类型来达到同样效果)

5、.h文件中定义了外部全局变量(如extern int x)时记得要包含对应头文件,注意在.cpp中包含了而在.h中未包含,编译器可能不提示出错,只在编译时才报错(养成好习惯就不会犯这样的错误)。

自己都看不懂当初要表达什么!!!

6、#pragma comment(lib, "IMPPlatformSDK.lib")  //若在项目属性的附加库中没有添加IMPPlatformSDK.lib,则需要此语句(注意附加库目录必须指定)

7、//extern CResourceTree ResourceTree;//在ResourceTree.h中声明了为extern类型的后,在此处就无需声明为extern---(有待复习)

8、看过一部分程序了解到,C++编程的风格是尽量把一类操作都封装成类,如可以把很多格式转化封装成一个类,以方便后面的使用。

9、自己在一个文件定义的结构体类型需要在其他文件出现的时候,可以在其他文件的.cpp文件中重写一下结构体定义,不可放到.h文件中,不然会出现从定义的错误。

10、.h文件中声明一个全局变量的话,若该文件被多次包含,则会报重定义的错误,若是把它声明为静态的话就不会。但是在头文件中定义结构体的话(没有同时定义结构体变量),被多文件包含时是不会重定义的,应为只是定义类型,未定义具体变量,系统不为其分配内存空间。

11、注意:自己把某块功能函数封装成类的话可以,如该类只被另外一个类B使用,可以在B的声明中定义类A的对象,若类A需被多文件(或不是其他类的文件)使用,则需在类A自己的头文件定义静态全局对象,或在类A的.cpp文件中定义全局对象,在.h中将其声明为extern类型。

12、对于MFC程序,系统自动为主对话框类添加了对象,而自己写程序的过程中每一个自己封装的类需自己手动添对象,添加方法是在对应.cpp文件中定义全局对象,在.h中将其声明为extern类型。也可以在某一个函数中直接添加某个类的局部对象。

13、在函数里定义的对象是局部对象,函数结束后对象自动被析构。

14、定义类的数据成员与定义局部变量的区别:当定义局部对象时数据成员便成为局部的,定义全局对象时,数据成员便成为全局的。注意:不可以定义两个名字一样的全局对象,但可以定义两个名字一样的局部对象,一个文件里可以同时有全局对象和局部对象(问:重名了是什么情况:重名了应该局部的和全局的互不干扰)定义静态成员的好处在于对于某一个类整个程序不管定义多少个对象(不管是全局的还是局部的)该静态成员只有一个(问不同类的静态成员重名影响吗:应该不影响,因为在类外静态成员要通过类名(或对象名)访问)。

15、C++程序模块化编程时当出现变量的重复定义问题时看看能否将变量定义成静态的来解决。

16、类A中定义了类B的一个对象b,则类A的成员函数中对对象b的操作具体是对应于类A的那个对象的操作,要看是A的那个哪个对象调用其成员函数。

17、自己写的头文件包含方式为 #include”student.h”,系统的用#include<x.h>

18、注意新建工程过程中第一次添加头文件和源文件时后缀名不可出错。否则只能移除再添加而不能通过重命名改后缀。

19、注意:头文件之间的包含只需考虑不要有全局变量(对象)的重复定义问题,所以最好不要在头文件中定义全局变量(对象),但是为什么类的成员不会出现重定义的报错是因为类的成员在定义的时候是不分配内存空间的,只有在定义对象的时候才分配。

20#include "vlc/vlc.h"    //该头文件的意思是在自己添加的附加库目录下还有一个vlc文件夹,而我们需要的vlc.h文件就在vlc文件夹下。

21自己平时写代码的时候要注意C++程序的封装性,同一类操作封装成一个类。

22、注意:当一个解决方案里面同时有动态库工程和控制台工程时,而控制台工程要用到动态库工程生成的dll时,需为控制台工程添加依赖项。

C++程序模块化编程

1、.h文件中定义类(对成员函数只包括声明部分),对应的.cpp文件主要是对类的成员函数的定义。

2、main函数中定义对象,然后通过对象引用类的成员以实现某功能。

3、将头文件添加到.cpp文件比添加到.h文件的好处是可以避免重复包含,如果不是头文件要用到某文件的内容的话,还是把头文件添加到.cpp中更好。

4、也可以某个类在自己的cpp文件中定义全局对象(变量),然后在对应.h文件中把它声明为外部的,如直接在.h文件中定义的话,该头文件被不同文件包含时会报重定义的错误。(通过静态数据类型也可以达到同样效果)

5、.h文件中声明一个全局变量的话,若该文件被多次包含,则会报重定义的错误,若是把它声明为静态的话就不会。但是在头文件中定义结构体的话(没有同时定义结构体变量),被多文件包含时是不会重定义的,应为只是定义类型,未定义具体变量,系统不为其分配内存空间。

6、想定义一个全局对象(变量),一般有两种方法

1>C语言常用方法:可以通过在.cpp文件中定义一个全局对象(变量),然后在对应的.h文件中把该变量或对象声明外部类型来实现,如extern int x  

2>C++语言常用方法:在定义某个类时把某个数据成员定义为static类型即可。

7、#pragma comment(lib, "IMPPlatformSDK.lib")  //若在项目属性的附加库中没有添加IMPPlatformSDK.lib,则需要此语句(注意附加库目录必须指定)

8、看过一部分程序了解到,C++编程的风格是尽量把一类操作都封装成类,如可以把很多格式转化封装成一个类,以方便后面的使用。

9、注意:自己把某块功能函数封装成类的话可以,如该类只被另外一个类B使用,可以在B的声明中定义类A的对象,若类A需被多文件(或不是其他类的文件)使用,则需在类A自己的头文件(在类外)定义静态全局对象,或在类A.cpp文件中定义全局对象,在.h中将其声明为extern类型。

10、在函数里定义的对象是局部对象,函数结束后对象自动被析构。

11、定义类的数据成员与定义局部变量的区别:当定义局部对象时数据成员便成为局部的,定义全局对象时,数据成员便成为全局的。注意:不可以定义两个名字一样的全局对象,但可以定义两个名字一样的局部对象,一个函数里可以同时有全局对象和局部对象(重名了应该局部的和全局的互不干扰)定义静态成员的好处在于对于某一个类整个程序不管定义多少个对象(不管是全局的还是局部的)该静态成员只有一个(问,不同类的静态成员重名影响吗:应该不影响,因为在类外静态成员要通过类名(或对象名)访问)。

12A中定义了类B的一个对象b,则类A成员函数中对对象b的操作具体是对应于类A哪个对象的操作,要看是A哪个对象调用其成员函数。

13、自己写的头文件包含方式为 #include”student.h”,系统的用#include<x.h>

14、注意新建工程过程中第一次添加头文件和源文件时后缀名不可出错。否则只能移除再添加而不能通过重命名改后缀。

15、注意:头文件之间的包含只需考虑不要有全局变量(对象)的重复定义问题,所以最好不要在头文件中定义全局变量(对象),类的成员不会出现重定义的报错是因为类的成员在定义的时候是不分配内存空间的,只有在定义对象的时候才分配。

16#include "vlc/vlc.h" //该头文件的意思是在自己添加的附加库目录下还有一个vlc文件夹,而我们需要的vlc.h文件就在vlc文件夹下。

17自己平时写代码的时候要注意C++程序的封装性,同一类操作封装成一个类。

18、注意:当一个解决方案里面同时有动态库工程和控制台工程时,而控制台工程要用到动态库工程生成的dll时,需为控制台工程添加依赖项。



注:由于笔者水平有限,若博文中存在错误或不周之处,还望各位大牛多多指教,有新的经验的时候也会及时更新本博文,谢谢!

  • 7
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在VSCode中进行C++模块化编程,可以通过以下步骤实现: 1. 打开VSCode,并确保已经安装了C++相关的插件,例如C/C++和Code Runner插件。 2. 创建一个新的文件夹作为项目的根目录。 3. 在根目录下创建一个名为`src`的文件夹,用于存放所有的源代码文件。 4. 在`src`文件夹中创建一个名为`main.cpp`的文件,作为程序的入口文件。 5. 在`src`文件夹中创建其他的模块文件,例如`module1.cpp`和`module2.cpp`,用于实现不同的功能模块。 6. 在`main.cpp`文件中引入其他模块的头文件,并调用相应的函数。 7. 在`src`文件夹中创建一个名为`include`的文件夹,用于存放所有的头文件。 8. 在`include`文件夹中创建与每个模块对应的头文件,例如`module1.h`和`module2.h`,用于声明模块的函数和变量。 9. 在每个模块的头文件中使用`#ifndef`和`#define`宏来防止头文件的重复包含。 10. 在`main.cpp`文件中使用`#include`指令引入其他模块的头文件。 11. 编写每个模块的具体实现代码,并在`main.cpp`文件中调用相应的函数。 12. 使用Code Runner插件来编译和运行程序。可以通过在`main.cpp`文件中按下`Ctrl + Alt + N`快捷键来运行程序。 13. 在VSCode的终端中查看程序的输出结果。 下面是一个示例的C++模块化编程的代码: ```cpp // main.cpp #include <iostream> #include "module1.h" #include "module2.h" int main() { module1Function(); module2Function(); return 0; } ``` ```cpp // module1.h #ifndef MODULE1_H #define MODULE1_H void module1Function(); #endif ``` ```cpp // module1.cpp #include <iostream> #include "module1.h" void module1Function() { std::cout << "This is module 1" << std::endl; } ``` ```cpp // module2.h #ifndef MODULE2_H #define MODULE2_H void module2Function(); #endif ``` ```cpp // module2.cpp #include <iostream> #include "module2.h" void module2Function() { std::cout << "This is module 2" << std::endl; } ``` 运行上述代码后,将会输出以下结果: ``` This is module 1 This is module 2 ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值