1、#include stdio.h
class a{
public:
a(){func(0);};
virtual void func(int data){printf(a1:%d,data);}
virtual void func(int data) const{printf(a2:%d,data);}
void func(char *str){printf(a3:(%s),str);}
};
class b:public a{
public:
void func(){printf(b1:%s,);}
void func(int data){printf(b2:%d,data);}
void func(char *str){printf(b3:(%s),str);}
};
int main()
{
a *pa;
b b;
const a *pca;
pa=b;
pa-func(1);
pa-func(test);
a().func(1);
pca=b;
pca-func(2);
return 0;
}
程式運行的結果:
a1:0
b2:1
a3:(test)
a1:0
a1:1
a2:2
1)
基類的指針指向派生類對象:那么該指針只能夠調用基類所定義的函式,但是如果該函式為虛函式,則調用該派生類自己的成員函式。(b2:1)
2)
如果以派生類的指針指向基類對象,則必須事先做明顯的轉型操作,但是這種做法很危險。
2、
include iostream.htemplate typename t
void func(const int t)
{
coutt 100endl;
}
templatetypename t
void func(const tt)
{
couttendl;
}
int main()
{
func(10.3);
func(1000);
return 0;
}
程式運行結果:
10.3
1000
如果上述函式改為
include iostream.hvoid func(const int t)
{
coutt 100endl;
}
templatetypename t
void func(const tt)
{
couttendl;
}
int main()
{
func(10.3);
func(1000);
return 0;
}
則程式的運行結果為:
10.3
1100
如果使用函式的非模板形式,不能在前面加上template關鍵字。
3、
改錯:
include iostream.hclass klass
{
public:
klass(){}
private:
~klass(){}
void func(int n){
coutklass!!endl;
} public:
void test(){
func(100);
}
};
int main()
{
klass k;
k.test();
return 0;
}
運行後程式顯示:error c2248: 'klass::~klass': cannot access private member declared in class 'klass'
證明析構函式的屬性必須為public。
但是,如果把klass k改為klass* pk; pk=new klass; pk-test();程式通過,但是klass不能釋放