For constants values, using const int Changed_num = 100; has the advantage over #define Changed_num 100 in that you can assign a type.  For example, you can const unsigned long Changed_num = 100, which is a bit tricky to declare as a #define.  (You can do something like #define Changed_num 100ul, but it's not as obvious.)
One possible use for #define as part of logging macros, such as boost::log.  They have the advantage of being to interpolate things like __FILE__ and __LINE__ at the point they're called.  They are also used for code generation, such as with boost::foreach (which has been supplanted by the range-based for in c++11) or boost::python.  In general, however, you're better off using [templated] functions so that you get proper type safety.
The main disadvantage of #define is that it's a super heavy hammer.  If you #define something, you can't override it later with a local variable or function.  One particularly egregious case is Windows.h which #defines min and max, giving compiler errors if you try to use std:::min unless you set NOMINMAX.