اعلان فقط  اعلام این نکته به کامپایلر هست که یه متغیر یا شیء یا تابع در برنامه وجود داره. مثلاً
...
int f();
void main(){
    int a = f();
}
int f(){
...
}
در حالی که وقتی کامپایلر به 
int a = f() میرسه تابع 
f هنوز تعریف نشده اما اعلان شده. بنابراین کامپایلر اخطار نمیده.
برای اشیا:
...
class C{
...
};
void main(){
    C *obj;
    ...
    obj = new C();
}
با خط 
C *obj اعلان اتفاق میافته و بنابراین میتونیم از شیء استفاده کنیم هر چند از نظر اجرایی اخطار داره.
با خط 
obj = new C() تعریف میکنیم و حالا استفاده از شیء خطای زمان اجرا نداره.
هیچ پژوهش انسانی نمیتواند ادعای علمی بودن داشته باشد، مگر اینکه از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)