1,2两题写出显示结果,3题改错
1.
#include
<
stdio.h
>
#include < stdlib.h >
class A{
public :
A(){func( 0 );}
virtual void func( int data){printf( " A1 :%d\n " ,data);}
virtual void func( int data) const {printf( " A2 :%d\n " ,data);}
void func( char * str){printf( " A3 :(%s)\n " ,str);}
};
class B: public A{
public :
void func(){printf( " B1 :%s\n " , "" );}
void func( int data){printf( " B2 :%d\n " ,data);}
void func( char * str){printf( " B3 :(%s)\n " ,str);}
};
int main()
{
A * pA;
B b; // A1 :0
const A * pcA;
pA =& b;
pA -> func( 1 ); // B2 :1
pA -> func( " test " ); // A3 :(test)
A().func( 1 ); // A1 :0 A1 :1
pcA =& b;
pcA -> func( 2 ); // A2 :2
system( " PAUSE " );
return 0 ;
}
#include < stdlib.h >
class A{
public :
A(){func( 0 );}
virtual void func( int data){printf( " A1 :%d\n " ,data);}
virtual void func( int data) const {printf( " A2 :%d\n " ,data);}
void func( char * str){printf( " A3 :(%s)\n " ,str);}
};
class B: public A{
public :
void func(){printf( " B1 :%s\n " , "" );}
void func( int data){printf( " B2 :%d\n " ,data);}
void func( char * str){printf( " B3 :(%s)\n " ,str);}
};
int main()
{
A * pA;
B b; // A1 :0
const A * pcA;
pA =& b;
pA -> func( 1 ); // B2 :1
pA -> func( " test " ); // A3 :(test)
A().func( 1 ); // A1 :0 A1 :1
pcA =& b;
pcA -> func( 2 ); // A2 :2
system( " PAUSE " );
return 0 ;
}
2.
#include
<
iostream
>
using namespace std;
template < typename T >
void func( const int & t)
{
cout << t + 100 << endl;
}
template < typename T >
void func( const T & t)
{
cout << t << endl;
}
int main()
{
func( 10.3 ); // 10.3
func( 1000 ); // 1000
system( " PAUSE " );
return 0 ;
}
第一个模板函数因为参数中不含类型参数,所以无法进行模板推演,也就无法进行实例化
using namespace std;
template < typename T >
void func( const int & t)
{
cout << t + 100 << endl;
}
template < typename T >
void func( const T & t)
{
cout << t << endl;
}
int main()
{
func( 10.3 ); // 10.3
func( 1000 ); // 1000
system( " PAUSE " );
return 0 ;
}
即使改为下面,一样会出错
#include
<
iostream
>
using namespace std;
template < typename T >
void func( const int & t)
{
cout << t + 100 << endl;
} // 这个函数实际上无法进行模板推演的模板函数
// template <typename T>
// void func(const T &t)
// {
// cout<<t<<endl;
// }
int main()
{
// func(10.3); // 10.3
func( 1000 ); // 1000
system( " PAUSE " );
return 0 ;
}
no matching function for call to `func(int)' using namespace std;
template < typename T >
void func( const int & t)
{
cout << t + 100 << endl;
} // 这个函数实际上无法进行模板推演的模板函数
// template <typename T>
// void func(const T &t)
// {
// cout<<t<<endl;
// }
int main()
{
// func(10.3); // 10.3
func( 1000 ); // 1000
system( " PAUSE " );
return 0 ;
}
3.
#include
<
iostream
>
#include < stdlib.h >
using namespace std;
class klass
{
public :
klass(){ cout << " ctor called! " ;}
private :
~ klass(){} // !!!private
void func( int n)
{
cout << " klass!! " << endl;
}
public :
void test()
{
func( 100 );
}
};
int main()
{
klass k;
k.test();
// automatically call ~kclass() here, but private!
system( " PAUSE " );
return 0 ;
}
#include < stdlib.h >
using namespace std;
class klass
{
public :
klass(){ cout << " ctor called! " ;}
private :
~ klass(){} // !!!private
void func( int n)
{
cout << " klass!! " << endl;
}
public :
void test()
{
func( 100 );
}
};
int main()
{
klass k;
k.test();
// automatically call ~kclass() here, but private!
system( " PAUSE " );
return 0 ;
}