c++的对象..

头文件

#ifndef Test1_h
#define Test1_h

class MyClass
{
public:
 int x;
 MyClass();
 virtual ~MyClass();
 void dump();
};

#endif

 

源文件

 

#include <test1.h>
#include <iostream>

MyClass::MyClass()
{
  std::cout<<"construct function"<<std::endl;
}

MyClass::~MyClass()
{
  std::cout<<"destruct"<<std::endl;
}

void MyClass::dump()
{
  std::cout<<"dump"<<std::endl;
}

 

 

 

调用:

 

int main()
{
  MyClass m;
  m.dump();

//结果是
//construct 
//dump
//desturct



   MyClass *p;
   p->dump();

//结果是
//dump

  MyClass *p = new MyClass();
  p->dump();

//结果是
//construct
//dump

  MyClass *p = new MyClass();
  p->dump();
  delete(p);

//结果是
//construct 
//dump
//desturct

 

 

 

淡淡的

glib编程 (main event loop)

最简单的例子

 

int main(int argc,char* argv)
{
	if (g_thread_supported() == 0)
		g_thread_init(NULL);

	g_print("g_main_loop_new\n");

	loop=g_main_loop_new(NULL,FALSE);
	
	g_print("g_main_loop_run\n");
	g_main_loop_run(loop);	
	
	g_print("g_main_loop_unref\n");
	g_main_loop_unref(loop);

	return 0;
}

 

 

你会发现程序会在 g_main_loop_run函数阻塞,这就是glib main loop了,如果没有人通知它退出,它是不会退出的。
通知循环退出的函数是 g_main_loop_quit。
怎么通知呢?主线程被g_main_loop_run阻塞了,没办法运行quit。本来我准备开一个线 程,sleep一秒钟,然后调用g_main_loop_quit。不过一想我们都在学习高精尖武器了,还用土枪土炮干啥。使用glib的定时器吧~

 

 

#include <glib.h>


GMainLoop *loop;

gint counter = 10;
gboolean mycallback(gpointer arg)
{
	g_print(".");
	if(--counter==0){
		g_print("\n");
		//exiting lop
		g_main_loop_quit(loop);
		return FALSE;
		}
	return TRUE;
}

int main(int argc,char* argv)
{
	if (g_thread_supported() == 0)
		g_thread_init(NULL);

	g_print("g_main_loop_new\n");

	loop=g_main_loop_new(NULL,FALSE);

	g_timeout_add(100,mycallback,NULL);
		
	g_print("g_main_loop_run\n");
	g_main_loop_run(loop);

	
	
	g_print("g_main_loop_unref\n");
	g_main_loop_unref(loop);

	return 0;
}


 

 

.

一秒钟后,程 序正常退出了!

 

 

 

引:http://baicj.spaces.live.com/blog/cns!F60F8E193FAC08E4!410.entry

glib编程..

一,标准宏

(一)G_OS_WIN32, 判断当前系统是否是win32

 

#include <glib.h>

int main(int argc,char* argv)
{
	#ifdef G_OS_WIN32
	printf("youare in windows os");
	#endif
	return 0;
}

 

 

 二,版本信息

1.glib_major_version   glib主版本信息

 

//extern const guint glib_major_version;
printf("glib version is %d",glib_major_version);

 

 

 

2.glib_minor_version 次版本号

 

//extern const guint glib_minor_version;
printf("glib minor version is %d \r\n",glib_minor_version);

 

 

 

3.其他:

glib_micro_version

glib_binary_age

glib_interface_age

 

4.检查版本兼容:GLIB_CHECK_VERSION

 

  if (!GLIB_CHECK_VERSION (1, 2, 0))
    g_error ("GLib version 1.2.0 or above is needed");

 

 

  @g_error : 弹出对话框,显示错误信息。

 

..

update log:

gtk在windows下编程环境的搭建...

首先,gtk是很复杂的库,依赖的东西也多,什么什么pango, glib之类的,如果你在代码中用 #include "gtk/gtk.h" …… 不用make和pkg-config是很难去编译的,当然我是指不用任何ide..只用文本编辑的方式来写的。。。

好了,我忘了从哪里下载了那个一个exe文件就可以安装所有环境的文件了,大概是从gimp那里。。

大概是:
sf的一个站http://sourceforge.net/project /showfiles.php?group_id=98754
我这里下的是 gtk-2.12.9-win32-2.exe
http://downloads.sourceforge.net/gladewin32/gtk-dev-2.12.9-win32-2.exe?modtime=1208660130&big_mirror=0

 

就是下载gtk-dev-x.xx.x-win32-2.exe了。。。

安装到某个目录,然后设置环境变量,好利用make直接编译程序:

GTK_BASEPATH = D:\work\cpp\GTK_DEV\GTK

PATH里加入: %GTK_BASEPATH%\bin;  (因为这样就可以执行pkg-config了)

PKG_CONFIG_PATH = D:\work\cpp\GTK_DEV\GTK\lib\pkgconfig

设置PKG_CONFIG_PATH的路径,指向有那些PC文件的地方。

写一个简单的程序,叫gtk_test1.c吧

 

#include "gtk/gtk.h"

int main(int argc,char *argv[])
{
    GtkWidget *window;
    gtk_init(&argc,&argv);
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_widget_show(window);
    gtk_main();
    return 0;
}

写个makefile

 

CC=D:/MinGW/bin/gcc.exe
Gtk1:
    ${CC} Gtk_test.c -o gtk_test1.exe `pkg-config --cflags --libs gtk+-2.0`

 

 

然后make一下:  make gtk1

这样就应该可以了。。。pkg-config那里有个错误,就是cario.pc里面多了一个:

10行:Requires.private: freetype2 >= 9.7.3 fontconfig libpng12 pixman-1 >= 0.10.0

改成

Requires.private: freetype2 >= 9.7.3 fontconfig libpng12

去掉pixman的依赖,就可以了。。。