1¡¢×÷ÓÃ
ΪÁËÔÚʵÏÖ¶à̬µÄʱºò²»Ôì³ÉÄÚ´æÐ¹Â¶,
Èç¹û»ùÀàÎö¹¹º¯Êýǰ²»¼Óvitual£¬ÅÉÉúÀà¶ÔÏó±»Ïú»Ùºó£¬Ö»»áµ÷ÓûùÀàµÄÎö¹¹º¯Êý£¬¶ø²»»áÈ¥µ÷ÓÃÅÉÉúÀàµÄÎö¹¹º¯Êý¡£
2¡¢¶ÔÓÚÕý³£µÄº¯Êý£¬Èç¹û»ùÀàÖÐÉùÃ÷Ϊvirtual£¬ÔòÅÉÉúÀà¿ÉÒÔ²»ÓÃÔÙдvirtual
// CPPTest.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
class Base
{
public:
Base(){}
virtual ~Base()
{
printf("Base Destructor!\n");
}
virtual void Func()
{
printf("Base Func!\n");
}
private:
int m_iData;
};
class Derived : public Base
{
public:
Derived(){}
~Derived()
{
printf("Derived Destructor!\n");
}
void Func()
{
printf("Derived Func!\n");
}
};
class Derived2 : public Derived
{
public:
Derived2(){}
~Derived2()
{
printf("Derived2 Destructor!\n");
}
void Func()
{
printf("Derived2 Func!\n");
}
};
int main(int argc, char* argv[])
{
Base *pb = new Base;
pb->Func();
Base *pd = new Derived;
pd->Func();
Base *pd2 = new Derived2;
pd2- ......
1¡¢×÷ÓÃ
ΪÁËÔÚʵÏÖ¶à̬µÄʱºò²»Ôì³ÉÄÚ´æÐ¹Â¶,
Èç¹û»ùÀàÎö¹¹º¯Êýǰ²»¼Óvitual£¬ÅÉÉúÀà¶ÔÏó±»Ïú»Ùºó£¬Ö»»áµ÷ÓûùÀàµÄÎö¹¹º¯Êý£¬¶ø²»»áÈ¥µ÷ÓÃÅÉÉúÀàµÄÎö¹¹º¯Êý¡£
2¡¢¶ÔÓÚÕý³£µÄº¯Êý£¬Èç¹û»ùÀàÖÐÉùÃ÷Ϊvirtual£¬ÔòÅÉÉúÀà¿ÉÒÔ²»ÓÃÔÙдvirtual
// CPPTest.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
class Base
{
public:
Base(){}
virtual ~Base()
{
printf("Base Destructor!\n");
}
virtual void Func()
{
printf("Base Func!\n");
}
private:
int m_iData;
};
class Derived : public Base
{
public:
Derived(){}
~Derived()
{
printf("Derived Destructor!\n");
}
void Func()
{
printf("Derived Func!\n");
}
};
class Derived2 : public Derived
{
public:
Derived2(){}
~Derived2()
{
printf("Derived2 Destructor!\n");
}
void Func()
{
printf("Derived2 Func!\n");
}
};
int main(int argc, char* argv[])
{
Base *pb = new Base;
pb->Func();
Base *pd = new Derived;
pd->Func();
Base *pd2 = new Derived2;
pd2- ......
[This was posted to comp.lang.c by its author, David Anderson, on 1994-05-06.]
The ``Clockwise/Spiral Rule''
By David Anderson
There is a technique known as the ``Clockwise/Spiral Rule'' which enables any C programmer to parse in their head any C declaration!
There are three simple steps to follow:
Starting with the unknown element, move in a spiral/clockwise direction; when ecountering the following elements replace them with the corresponding english statements:
[X] or [] => Array X size of... or Array undefined size of... (type1, type2) => function passing type1 and type2 returning... * => pointer(s) to...
Keep doing this in a spiral/clockwise direction until all tokens have been covered.
Always resolve anything in parenthesis first!
Example #1: Simple declaration
+-------+
| +-+ |
| ^ | |
char *str[10];
^ ^ | |
| +---+ |
......
JavaÖе÷ÓÃC/C++Éú³ÉµÄDLL
Ò»¡¢ Éú³ÉCµÄÍ·Îļþ
¡¡¡¡1. ±à¼Main.java
¡¡public class Main
¡¡¡¡{
¡¡¡¡public native static int getStrNum(byte str[], int strLen);
¡¡¡¡}
¡¡¡¡2. Éú³ÉÍ·Îļþ
¡¡¡¡°´win + r´ò¿ª“ÔËÐД´°¿Ú£¬ÊäÈë“cmd”£¬´ò¿ªDOS¿ØÖÆÌ¨´°¿Ú¡£½øÈëÉÏÃæMain.javaËùÔÚµÄĿ¼ÖУ¬ÊäÈ룺
¡¡¡¡javac Main.java
¡¡¡¡javah Main
¡¡¡¡Á½ÌõÃüÁîÍê³Éºó»áÉú³ÉMain.hÎļþ
¡¡¡¡¶þ¡¢ Éú³ÉDLL
¡¡¡¡1. н¨¿Õ¹¤³Ì
¡¡¡¡ÔÚVSÖÐн¨¹¤³Ì£ºWin32 Console Application£¬È¡Ãû“MakeDLL”£¬Ñ¡Ôñ¿Õ¹¤³Ì¡£Ð½¨ºóÐ޸Ť³ÌÊôÐÔ£º
¡¡¡¡(1) GeneralÖУ¬½«“Configuration Type”¸ÄΪ“Dynamic Library (.dll)”£»
¡¡¡¡(2) C/C++µÄGeneralÖУ¬½«“Additional Include Directories”Ìí¼ÓÁ½Ï
¡¡¡¡“C:Program FilesJavajdk1.5.0_06include”
¡¡¡¡“C:Program FilesJavajdk1.5.0_06includewin32”
¡¡¡¡¸ù¾ÝÄã°²×°µÄJAVA·¾¶¶øÉèÖã¬ÕâÊÇÒòΪÔÚC/C++±àÒë¹ý³ÌÖÐҪʹÓÃJAVAµÄjni.hµÈÎļþ
¡¡¡¡2. ½«ÉÏÃæÉú³ÉµÄMain.hÌí¼ÓÈ빤³Ì
¡¡¡¡3. ÐÂ ......
JavaÖе÷ÓÃC/C++Éú³ÉµÄDLL
Ò»¡¢ Éú³ÉCµÄÍ·Îļþ
¡¡¡¡1. ±à¼Main.java
¡¡public class Main
¡¡¡¡{
¡¡¡¡public native static int getStrNum(byte str[], int strLen);
¡¡¡¡}
¡¡¡¡2. Éú³ÉÍ·Îļþ
¡¡¡¡°´win + r´ò¿ª“ÔËÐД´°¿Ú£¬ÊäÈë“cmd”£¬´ò¿ªDOS¿ØÖÆÌ¨´°¿Ú¡£½øÈëÉÏÃæMain.javaËùÔÚµÄĿ¼ÖУ¬ÊäÈ룺
¡¡¡¡javac Main.java
¡¡¡¡javah Main
¡¡¡¡Á½ÌõÃüÁîÍê³Éºó»áÉú³ÉMain.hÎļþ
¡¡¡¡¶þ¡¢ Éú³ÉDLL
¡¡¡¡1. н¨¿Õ¹¤³Ì
¡¡¡¡ÔÚVSÖÐн¨¹¤³Ì£ºWin32 Console Application£¬È¡Ãû“MakeDLL”£¬Ñ¡Ôñ¿Õ¹¤³Ì¡£Ð½¨ºóÐ޸Ť³ÌÊôÐÔ£º
¡¡¡¡(1) GeneralÖУ¬½«“Configuration Type”¸ÄΪ“Dynamic Library (.dll)”£»
¡¡¡¡(2) C/C++µÄGeneralÖУ¬½«“Additional Include Directories”Ìí¼ÓÁ½Ï
¡¡¡¡“C:Program FilesJavajdk1.5.0_06include”
¡¡¡¡“C:Program FilesJavajdk1.5.0_06includewin32”
¡¡¡¡¸ù¾ÝÄã°²×°µÄJAVA·¾¶¶øÉèÖã¬ÕâÊÇÒòΪÔÚC/C++±àÒë¹ý³ÌÖÐҪʹÓÃJAVAµÄjni.hµÈÎļþ
¡¡¡¡2. ½«ÉÏÃæÉú³ÉµÄMain.hÌí¼ÓÈ빤³Ì
¡¡¡¡3. ÐÂ ......
JavaÖе÷ÓÃC/C++Éú³ÉµÄDLL
Ò»¡¢ Éú³ÉCµÄÍ·Îļþ
¡¡¡¡1. ±à¼Main.java
¡¡public class Main
¡¡¡¡{
¡¡¡¡public native static int getStrNum(byte str[], int strLen);
¡¡¡¡}
¡¡¡¡2. Éú³ÉÍ·Îļþ
¡¡¡¡°´win + r´ò¿ª“ÔËÐД´°¿Ú£¬ÊäÈë“cmd”£¬´ò¿ªDOS¿ØÖÆÌ¨´°¿Ú¡£½øÈëÉÏÃæMain.javaËùÔÚµÄĿ¼ÖУ¬ÊäÈ룺
¡¡¡¡javac Main.java
¡¡¡¡javah Main
¡¡¡¡Á½ÌõÃüÁîÍê³Éºó»áÉú³ÉMain.hÎļþ
¡¡¡¡¶þ¡¢ Éú³ÉDLL
¡¡¡¡1. н¨¿Õ¹¤³Ì
¡¡¡¡ÔÚVSÖÐн¨¹¤³Ì£ºWin32 Console Application£¬È¡Ãû“MakeDLL”£¬Ñ¡Ôñ¿Õ¹¤³Ì¡£Ð½¨ºóÐ޸Ť³ÌÊôÐÔ£º
¡¡¡¡(1) GeneralÖУ¬½«“Configuration Type”¸ÄΪ“Dynamic Library (.dll)”£»
¡¡¡¡(2) C/C++µÄGeneralÖУ¬½«“Additional Include Directories”Ìí¼ÓÁ½Ï
¡¡¡¡“C:Program FilesJavajdk1.5.0_06include”
¡¡¡¡“C:Program FilesJavajdk1.5.0_06includewin32”
¡¡¡¡¸ù¾ÝÄã°²×°µÄJAVA·¾¶¶øÉèÖã¬ÕâÊÇÒòΪÔÚC/C++±àÒë¹ý³ÌÖÐҪʹÓÃJAVAµÄjni.hµÈÎļþ
¡¡¡¡2. ½«ÉÏÃæÉú³ÉµÄMain.hÌí¼ÓÈ빤³Ì
¡¡¡¡3. ÐÂ ......
»Ø¹Ë֮ǰµÄƪ·ù£¬CÓïÑÔµÄÖ÷Ì岿·Ö»ù±¾ÒѾ½éÉÜÍêÁË¡£Ö®ËùÒÔûÓнéÉÜC++µÄÏà¹ØÌØÐÔÊÇÒòΪÔÚ֮ǰµÄÎÄÕÂÖÐCºÍC++ÔÚÕâЩ·½Ãæ¶¼Óй²ÐÔ£¬ËùÒÔÔÚÃæÏò¶ÔÏó֮ǰ¡£ÎÒÃÇÏȰÑÕâЩ¹²ÐÔ¸ø½éÉÜÍê¡£Ò²¾ÍÊÇ˵ÔÚ½éÉÜÃæÏò¶ÔÏó֮ǰ£¬ËùÓеÄÎÄÕ¶¼ÊÇCC++Öж¼ÄÜʹÓõġ£´ÓÕâµãÉÏÀ´¿´£¬ÏÖÔÚÕý¼«Á¦·Ü¶·ÓÚC++Õ½ÏßÉϵijõѧÕß»¹ÊǺÜÓÐÓô¦µÄ¡£
±¾Æª¼ÌÐøÑØ×ÅÕâÌõ·Ïߣ¬µ½±¾ÆªÎªÖ¹°üÀ¨±¾Æª¶¼»¹²»»á¼±ÓÚÈ¥½éÉÜC++µÄÃæÏò¶ÔÏóµÄÌØÐÔ¡£ÄÇôÔÚ֮ǰµÄÎÄÕÂÖУ¬¿ÉÒÔ˵»ù±¾¶¼°ÑÄÚÈݸø½éÉÜÍêÁË¡£±¾ÆªËäÈ»²»ÊÇ´ó¸ÅÄµ«ÊÇÔÚʵ¼ÊµÄÏîÄ¿ÖÐÊǾø¶ÔÀë²»¿ªµÄ¡£ÄÇôÎÒÃǾÍÔÚ±¾Æª¿ªÊ¼ÎÒÃǵÄλÔËËãÂó̡£
Ê×ÏÈ£¬Î»ÔËËãµ½µ×ÓÃÀ´×öʲô£¬Óô¦¶à²»£¬ºÃÏñµ½ÏÖÔÚÎÒҲûÓÐÔõôÓÃλÔËËãÄØ£¿ ºÜ¶à³õѧÕßÎÒÏàÐÅ»áÓÐÕâÑùµÄÒÉÎÊ¡£ÄÇô±¾Æª¾Í½«½éÉÜλÔËËãµÄÇ¿´óÓÃ;¼°ÎÞÏÞ÷ÈÁ¦¡£
λÔËËã¸ú¶þ½øÖÆÁªÏµ·Ç³£½ôÃÜ£¬¶þ½øÖÆÕâ¸ö¸ÅÄîÏàÐÅ´ó¼Ò¶¼²»Ä°Éú£¬ÎÒÃǵÄλÔËËãÒ²¾ÍÊÇÔÚÕâЩ0»ò1ÉϽøÐвÙ×÷¡£²»ÒªËµ¶þ½øÖÆÄã¶¼²»ÖªµÀ¡£±ÈÈ磺
7µÄ8λ¶þ½øÖÆÎª£º 0000 0111
7µÄ32λ¶þ½øÖÆÎª£º 0000 0000 0000 0000 0000 0000 0000 0111
¶þ½øÖÆÓëÊ®½øÖƵĻ»ËãÎҾͲ»ËµÁË¡£ÉÏÃæÎªÊ²Ã´Èý¸ö1¾Í±íʾ7£¬²»ÖªµÀµÄ»°¾Í¿´¿´Êé¹þ¡£
ÉÏÃæËµµ½ÁË8λºÍ32룬ÎÒÃÇÖªµÀÒ»¸ö× ......
»Ø¹Ë֮ǰµÄƪ·ù£¬CÓïÑÔµÄÖ÷Ì岿·Ö»ù±¾ÒѾ½éÉÜÍêÁË¡£Ö®ËùÒÔûÓнéÉÜC++µÄÏà¹ØÌØÐÔÊÇÒòΪÔÚ֮ǰµÄÎÄÕÂÖÐCºÍC++ÔÚÕâЩ·½Ãæ¶¼Óй²ÐÔ£¬ËùÒÔÔÚÃæÏò¶ÔÏó֮ǰ¡£ÎÒÃÇÏȰÑÕâЩ¹²ÐÔ¸ø½éÉÜÍê¡£Ò²¾ÍÊÇ˵ÔÚ½éÉÜÃæÏò¶ÔÏó֮ǰ£¬ËùÓеÄÎÄÕ¶¼ÊÇCC++Öж¼ÄÜʹÓõġ£´ÓÕâµãÉÏÀ´¿´£¬ÏÖÔÚÕý¼«Á¦·Ü¶·ÓÚC++Õ½ÏßÉϵijõѧÕß»¹ÊǺÜÓÐÓô¦µÄ¡£
±¾Æª¼ÌÐøÑØ×ÅÕâÌõ·Ïߣ¬µ½±¾ÆªÎªÖ¹°üÀ¨±¾Æª¶¼»¹²»»á¼±ÓÚÈ¥½éÉÜC++µÄÃæÏò¶ÔÏóµÄÌØÐÔ¡£ÄÇôÔÚ֮ǰµÄÎÄÕÂÖУ¬¿ÉÒÔ˵»ù±¾¶¼°ÑÄÚÈݸø½éÉÜÍêÁË¡£±¾ÆªËäÈ»²»ÊÇ´ó¸ÅÄµ«ÊÇÔÚʵ¼ÊµÄÏîÄ¿ÖÐÊǾø¶ÔÀë²»¿ªµÄ¡£ÄÇôÎÒÃǾÍÔÚ±¾Æª¿ªÊ¼ÎÒÃǵÄλÔËËãÂó̡£
Ê×ÏÈ£¬Î»ÔËËãµ½µ×ÓÃÀ´×öʲô£¬Óô¦¶à²»£¬ºÃÏñµ½ÏÖÔÚÎÒҲûÓÐÔõôÓÃλÔËËãÄØ£¿ ºÜ¶à³õѧÕßÎÒÏàÐÅ»áÓÐÕâÑùµÄÒÉÎÊ¡£ÄÇô±¾Æª¾Í½«½éÉÜλÔËËãµÄÇ¿´óÓÃ;¼°ÎÞÏÞ÷ÈÁ¦¡£
λÔËËã¸ú¶þ½øÖÆÁªÏµ·Ç³£½ôÃÜ£¬¶þ½øÖÆÕâ¸ö¸ÅÄîÏàÐÅ´ó¼Ò¶¼²»Ä°Éú£¬ÎÒÃǵÄλÔËËãÒ²¾ÍÊÇÔÚÕâЩ0»ò1ÉϽøÐвÙ×÷¡£²»ÒªËµ¶þ½øÖÆÄã¶¼²»ÖªµÀ¡£±ÈÈ磺
7µÄ8λ¶þ½øÖÆÎª£º 0000 0111
7µÄ32λ¶þ½øÖÆÎª£º 0000 0000 0000 0000 0000 0000 0000 0111
¶þ½øÖÆÓëÊ®½øÖƵĻ»ËãÎҾͲ»ËµÁË¡£ÉÏÃæÎªÊ²Ã´Èý¸ö1¾Í±íʾ7£¬²»ÖªµÀµÄ»°¾Í¿´¿´Êé¹þ¡£
ÉÏÃæËµµ½ÁË8λºÍ32룬ÎÒÃÇÖªµÀÒ»¸ö× ......
ÏÂÃæÓõ½µÄ·½·¨½ÐշתÏà³ý·¨£¬¾ß×ö²½ÖèÈçÏÂ
ÏÈÓÃСµÄÒ»¸öÊý³ý´óµÄÒ»¸öÊý£¬µÃµÚÒ»¸öÓàÊý£»
ÔÙÓõÚÒ»¸öÓàÊý³ýСµÄÒ»¸öÊý£¬µÃµÚ¶þ¸öÓàÊý£»
ÓÖÓõڶþ¸öÓàÊý³ýµÚÒ»¸öÓàÊý£¬µÃµÚÈý¸öÓàÊý£»
ÕâÑùÖð´ÎÓúóÒ»¸öÊýÈ¥³ýǰһ¸öÓàÊý£¬Ö±µ½ÓàÊýÊÇ0Ϊֹ¡£ÄÇô£¬×îºóÒ»¸ö³ýÊý¾ÍÊÇËùÇóµÄ×î´ó¹«Ô¼Êý£¨Èç¹û×îºóµÄ³ýÊýÊÇ1£¬ÄÇôÔÀ´µÄÁ½¸öÊýÊÇ»¥ÖÊÊý£©¡£
ÓÃCÓïÑÔ£º
#include <stdio.h>
main()
{
int p,r,n,m,temp;
printf("ÇëÊäÈëÁ½¸öÕýÕûÊýn,m"); //Õâ¸öµØ·½ÔËÐÐʱҪעÒ⣬Á½¸öÊý×ÖÖ®¼äÒªÓÓ£¬”¸î¿ª¡£
scanf("%d,%d",&n,&m);
p=n*m;
if(n<m)
& ......
ÏÂÃæÓõ½µÄ·½·¨½ÐշתÏà³ý·¨£¬¾ß×ö²½ÖèÈçÏÂ
ÏÈÓÃСµÄÒ»¸öÊý³ý´óµÄÒ»¸öÊý£¬µÃµÚÒ»¸öÓàÊý£»
ÔÙÓõÚÒ»¸öÓàÊý³ýСµÄÒ»¸öÊý£¬µÃµÚ¶þ¸öÓàÊý£»
ÓÖÓõڶþ¸öÓàÊý³ýµÚÒ»¸öÓàÊý£¬µÃµÚÈý¸öÓàÊý£»
ÕâÑùÖð´ÎÓúóÒ»¸öÊýÈ¥³ýǰһ¸öÓàÊý£¬Ö±µ½ÓàÊýÊÇ0Ϊֹ¡£ÄÇô£¬×îºóÒ»¸ö³ýÊý¾ÍÊÇËùÇóµÄ×î´ó¹«Ô¼Êý£¨Èç¹û×îºóµÄ³ýÊýÊÇ1£¬ÄÇôÔÀ´µÄÁ½¸öÊýÊÇ»¥ÖÊÊý£©¡£
ÓÃCÓïÑÔ£º
#include <stdio.h>
main()
{
int p,r,n,m,temp;
printf("ÇëÊäÈëÁ½¸öÕýÕûÊýn,m"); //Õâ¸öµØ·½ÔËÐÐʱҪעÒ⣬Á½¸öÊý×ÖÖ®¼äÒªÓÓ£¬”¸î¿ª¡£
scanf("%d,%d",&n,&m);
p=n*m;
if(n<m)
& ......
¹ØÓÚcµÄ¶¯Ì¬ÄÚ´æ¹ÜÀíÒ»Ö±ÊǸö¾¾Ã²»Ë¥µÄ»°Ìâ,ÃæÊÔÒ²ÊÇ»ù±¾É϶¼»á¿¼µÄ,±¾À´¸Ð¾õÒѾÃ÷°×ÁË,µ«ÊǽñÌìʹÓõÄʱºòÒ»²»Ð¡Ðĵ¼Ö³ÌÐò±ÀÀ£ÁË,Òò´ËÉîÈëµÄÈ¥²éÁËÏÂ×ÊÁÏ,ÊÕ»ñ²»ÉÙ...Ìù³öÀ´Óë´ó¼Ò·ÖÏí...
ÏÈÌù¸ö´íÎó´úÂë:
int * ptr = (int *)malloc(256);
ptr = ptr + 3;//¶ÔÖ¸Õë½øÐÐÒ»¸öÆ«ÒÆ²Ù×÷
free(ptr);
Õâ¾ÍÊÇÒ»¶Î´íÎó´úÂë..?ÏàÐÅÒѾÓÐÈË¿´³öÀ´´íÎóÔÚÄÄÀïÁË...Èç¹û²»Ã÷°×µÄ¼ÌÐøÍùÏÂÃæ¿´...
ÏȾÍÕâ¸ö´íÎó½²½âÒ»ÏÂ,free(ptr)º¯ÊýÊÍ·ÅÄÚ´æµÄʱºòÊÇÐèÒª´ÓÔÏÈmalloc()º¯Êý·ÖÅäµÄµØÖ·ÄÇ¿ªÊ¼ÊͷŵÄ,»òÕßÕâÑù˵,¶Ômalloc()µÄÄÚ´æ½øÐÐfree()²Ù×÷,ÊÇ´Óµ±Ç°µÄÖ¸ÕëÖ¸ÏòµÄµØÖ·¿ªÊ¼ÊÍ·ÅÓÐmalloc()º¯Êý·ÖÅäµÄ´óСµÄÒ»¿éÄÚ´æÇøÓò...Òò´Ë,ÕâÑù¾ÍÐèÒªÄãÔÚ½øÐÐfree²Ù×÷µÄʱºò,±£Ö¤Ö¸ÕëËùÖ¸ÏòµÄλÖû¹ÊÇÓÐmalloc()·ÖÅä³öÀ´µÄµØÖ·...ÄÇôÈç¹ûÄãÐèÒª¶Ômalloc()·ÖÅä³öÀ´µÄÄÚ´æÇøÓò½øÐвÙ×÷µÄ»°...¾ÍÏóÏÂÃæÕâÑù...×ö¸öµØÖ·±¸·Ý...
int * ptr = ( int *)malloc(256);
& ......