Java转C++时遇到的问题(简述)。

前景:之前一直作Java开发,现在需要做一个C++的MFC项目开发。(以下内容,是笔者在阅读C++项目遇到的问题,之后有部分MFC的一些知识点总结)
一、头文件
类似

#include "GenICam/Camera.h"

在vs编写C++代码时,常见include后面跟一个.h头文件,里面包含了成员变量,构造函数,成员函数和宏定义等,在这个头文件中,我们不写函数们的具体实现方法。
定义完头文件,我们要新建一个源文件Camera.cpp文件来实现头文件里的每一个方法。源文件的名字与头文件的名字保持一致,并且在源文件中必须include头文件。
还有

#include<iostream>

在C++中要使用cout等标准输入输出函数就必须包含iostrem这个头文件。

二、C++命名空间
使用整个命名空间:using namespace name;
使用命名空间中的变量:using name::variable;
使用默认命名空间中的变量: ::variable;
例如:

namespace First 
{
	int i = 0;
}
 
namespace Second
{
	int i = 1;
 
	namespace Internal //嵌套命名空间
	{
		struct P  //嵌套命名空间
		{
			int x;
			int y;
		};
	}
}
 
int main()
{
	using namespace First; //使用整个命名空间
	using Second::Internal::P;  //使用嵌套的命名空间
 
	printf("First::i = %d\n", i);
	printf("Second::i = %d\n", Second::i);  //使用命名空间中的变量
 
	P p = { 2, 3 };
 
	printf("p.x = %d\n", p.x);
	printf("p.y = %d\n", p.y);
 
	system("pause");
	return 0;
}

运行结果是:
在这里插入图片描述
std::名称空间标识符,C++标准库中的函数或者对象都是在命名空间std中定义的,所以我们要使用标准库中的函数或者对象都要用std来限定。

三、关键字virtual
在C++该关键字,指虚函数。
虚函数是指一个类中你希望重载的成员函数 ,当你用一个基类指针或引用指向一个继承类对象的时候,调用一个虚函数时, 实际调用的是继承类的版本。  ——摘自MSDN
其中虚函数最重要的特点是动态联编,它可以在运行时判断指针指向的对象,并自动调用相应的函数。它可以在运行时判断指针指向的对象,并自动调用相应的函数。
例子:

class Parent
{    
 public:
     
     char data[20];
     void Function1();    
     virtual void Function2();   // 这里声明Function2是虚函数
     
 }parent;
 class Child:public Parent
 {
     void Function1();
     void Function2();
     
 } child;
------------------------------
p=&child;   
p->Function1();        
p->Function2();   结果:Function1()执行父类方法;Function2()执行子类方法。

四、typedef关键字
链接:https://www.zhihu.com/question/29798061/answer/144423125
详细可参考上述链接。
一个简单的例子:

typedef int P();
typedef int Q();
class X {
    static P(Q); // 等价于`static int Q()`, Q在此作用域中不再是一个类型
    static Q(P); // 等价于`static int Q(int ())`, 定义了一个名为Q的function

整形:

typedef int x; // 定义了一个名为x的int类型

结构体:

typedef struct { char c; } s; // 定义名为s的struct类型

指针:

typedef int *p; //定义了一个名为p的指针类型, 它指向int (中文描述指针好累)

数组:

typedef int A[];  // 定义一个名为A的ints数组的类型

函数:

typedef int f(); // 定义一个名为f, 参数为空, 返回值为int的函数类型
typedef int g(int); // 定义一个名为g, 含一个int参数, 返回值为int行的函数类型

五、结构体(struct)
详细见链接:http://blog.csdn.net/cainv89/article/details/48447225
在C++中,考虑到C语言到C++语言过渡的连续性,对结构体进行了扩展,C++的结构体可以包含函数,这样,C++的结构体也具有类的功能,与class不同的是,结构体包含的函数默认为public,而不是private。
作用:
在实际项目中,结构体是大量存在的。研发人员常使用结构体来封装一些属性来组成新的类型。由于C语言内部程序比较简单,研发人员通常使用结构体创造新的“属性”,其目的是简化运算。
结构体在函数中的作用不是简便,最主要的作用就是封装。封装的好处就是可以再次利用。让使用者不必关心这个是什么,只要根据定义使用就可以了。

六、C++中常会用到.和::和:和->
1、A.B则A为对象或者结构体;
2、A->B则A为指针,->是成员提取,A->B是提取A中的成员B,A只能是指向类、结构、联合的指针;
3、::是作用域运算符,A::B表示作用域A中的名称B,A可以是名字空间、类、结构;
4、:一般用来表示继承;

七、C++中赋值的不同
详见链接:https://blog.csdn.net/duanyajun987/article/details/77844147


MFC的相关知识碎片:
双击资源文件下的.rc文件可以打开对应的资源视图。
在这里插入图片描述
资源视图中主要包含子目录:Dialog(对话框)、Icon(图标)、String Table(字符串表)和Version(版本)
在这里插入图片描述
常用属性:
1.ID:对话框ID,唯一标识对话框资源,可以修改。此处为IDD_ADDITION_DIALOG,我们不修改它。
2.Caption:对话框标题。此处默认为Addition,我们将其修改为“加法计算器”。
3.Border:边框类型。有四种类型:None、Thin、Resizing和Dialog Frame。我们使用默认的Dialog Frame。
4.Maximize:是否使用最大化按钮。我们使用默认的False。
5.Minimize:是否使用最小化按钮。同样我们使用默认的False。
6.Style:对话框类型。有三种类型:Overlapped(重叠窗口)、Popup(弹出式窗口)和Child(子窗口)。弹出式窗口比较常见。我们使用默认的Popup类型。
7.System Menu:是否带有标题栏左上角的系统菜单,包括移动、关闭等菜单项。我们使用默认的True。
8.Title Bar:是否带有标题栏。我们使用默认的True。
9.Font(Size):字体类型和字体大小。如果将其修改为非系统字体,则Use System自动改为False。而如果Use System原来为False,将其修改为True,则Font(Size)自动设置为系统字体。这里我们使用默认的系统字体。
在这里插入图片描述
vs2013
MFC开发的工具箱:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值