2010年12月30日星期四

在main之前运行代码

我们学习C语言编程的时候老师都告诉我们程序从main函数开始执行,main返回时也代表程序结束。那么能否在main函数执行前运行一些代码呢,当然可以,虽然没多大意义。演示代码如下:

#include

class outNum{
public:
outNum()
{
int a;
std::cin>>a;
std::cout< }
};
int run()
{
std::cout<<"runn";
return 0;
}
int main()
{
std::cout<<"beginn";
return 0;
}
outNum a;
int m=run();


上面代码运行后先执行outNum对象的创建,无参数构造函数要求输入一个整形值,比如我们输入22后运行结果如下:

22
22
run
begin

记得以前哪本书上提到过在main运行前进行一些验证什么的。在这里用示例代码和大家分享一下。

2010年12月29日星期三

洛阳灾害天气个例管理平台

软件主界面如下所示


程序主界面
点击左下方的四个按钮可以切换筛选框的分类依据,比如点击按年份后,筛选框将出现从当年开始的逆序年份排列,选择某一年就可查看选定年份的灾害个例

2010年12月27日星期一

wxWidgets 多平台开发心得

不得不承认C++跨平台开发是有一定难度的,即使有wxWidgets这么好的库。


首先要考虑文件系统方面的差异:



  • 1.Ubuntu下面C++的源代码使用UTF8无BOM格式,换行符为n, 而在XP下面则为ansi编码,换行符为rn,源代码要进行转换。

  • 2.Ubuntu下面路径分隔符为/,而xp下面则为, 一定要注意在字符串中此字符表示为"",可以用wxFILE_SEP_PATH宏统一起来


其次是一些函数不同平台下实现细节的差异



  • 1.在ubuntu下获取Report格式的listctrl某一列的text 代码如下

    wxListItem info;
    info.SetId(row);
    info.SetColumn(col);
    list->GetItem(info);

    而在xp中必需在list->GetItem(info) 之前设置item的text码:info.SetMask(wxLIST_MASK_TEXT);

  • 2.wxDC类中设置放大系数和正负逻辑方向的一些不同,参见以前的有关讨论。


2010年12月14日星期二

wxWidgets中定时器(wxTimer)的使用

最简单的例子:



class MyFrame : public wxFrame
{
public:
...
       void OnTimer(wxTimerEvent&amp; event);

private:
       wxTimer m_timer; //定义 wxTimer对象
};

BEGIN_EVENT_TABLE(MyFrame, wxFrame)
     EVT_TIMER(TIMER_ID, MyFrame::OnTimer) //绑定事件处理函数
END_EVENT_TABLE()

MyFrame::MyFrame()
: m_timer(this, TIMER_ID) //绑定此对象到this并指定TIMER_ID
{
       m_timer.Start(1000); // 设置1秒间隔,并启动它
}

void MyFrame::OnTimer(wxTimerEvent&amp; event)
{
     // 在下面写需要执行的代码
}

C++ 继承类调用父类的函数

代码如下所示:


#include <iostream>

class A
{
protected:
int m;

public:
A(){ m = 0; }
void put()
{
add();
std::cout<<m<<std::endl;
}

void add()
{
m += 1;
}
};

class B:public A
{
public:
void add()
{
m += 2;
}
};

int main()
{
A a ;
B b ;
a.put();
b.put();
}


编译后运行结果是什么呢, 1   1  还是1   2呢?

正确答案是1     1,类B继承自A,执行 b.put() 时实际上是运行了A::put(),所以会调用 A::add() 而不是 B::add();