转:趋势科技的笔试

趋势科技的笔试:
 
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 不能释放
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值