转:趋势科技的笔试

来源:互联网 发布:mac 10.10安装xcode 编辑:程序博客网 时间:2024/04/28 03:17
趋势科技的笔试:
 
1
#include <stdio.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;
       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.h>
 
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);
       func(1000);
 
       return 0;
}
 
程序运行结果:
10.3
1000
 
如果上述函数改为
#include <iostream.h>
 
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);
       func(1000);
 
       return 0;
}
 
则程序的运行结果为:
10.3
1100
 
如果使用函数的非模板形式,不能在前面加上template关键字。
 
3
改错:
#include <iostream.h>
 
class klass
{
public:
       klass(){}
private:
       ~klass(){}
       void func(int n){
              cout<<"klass!!"<<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不能释放
 
原创粉丝点击