11.6 趋势科技的笔试题目

本文解析了C++面试中常见的几个编程题目,包括基类与派生类的虚函数调用、模板函数重载解析及类成员访问权限等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

趋势科技的笔试:

 

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不能释放。

### 如何使用 Git 命令删除本地仓库中的多余文件 为了清理本地 Git 仓库中不再需要的文件,可以采用以下方法: #### 使用 `git clean` 清理未跟踪文件 对于那些从未被提交到仓库的新创建或下载的文件(即处于工作目录但不在暂存区也不在版本库),可以通过 `git clean` 来移除这些文件。 - `-f` 参数用于强制执行操作;默认情况下,Git 不允许清除任何东西除非指定了此选项。 - 如果只想删除未追踪的文件而不影响子模块或其他特定路径,则应加上 `-d` 标志来同时处理空目录[^1]。 ```bash # 删除所有未跟踪的文件和目录 git clean -fd ``` #### 移除已跟踪文件并更新索引 如果某些文件已经被加入过 `.gitignore` 文件但是仍然存在于历史记录里,那么就需要先将其从项目的历史中彻底消除再忽略它们。这通常涉及到两步走策略: 1. **停止跟踪指定文件/模式**:通过 `rm --cached` 可以让 Git 停止跟踪某个文件而不会实际物理上删掉它; ```bash # 停止跟踪名为example.log的日志文件 git rm --cached example.log ``` 2. **应用更改并将修改推送到远程分支** 推送前记得添加新的改动至缓存(`add`) 并 提交 (`commit`) 这些变化: ```bash git add . git commit -m "Stop tracking sensitive or large files" git push origin main ``` 另外值得注意的是,在多分支环境中操作时要小心谨慎,因为上述命令只会影响当前检出的工作树副本以及关联的索引状态。如果有多个活跃的工作区域或者使用了 `git worktree` 功能,则可能还需要考虑其他因素[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值