1.两个指针变量不可以 相加
解:两个指针相加没有意义,就好像宾馆房间号一样,两个房间号相加,没有意义。但是房间号可以加上一个整数,如我住601,你的房间号比我大5
2.下面程序的输出结果是:出错
char *p1 = "123",*p2 = "ABC",str[50]="xyz";
strcpy(str+2,strcat(p1,p2));
cout<<str;
解:p1和p2指向的是常量存储区的字符串常量,没法连接,会有问题。
3.有函数定义
void test(int a){}
void test(loat a ){}
则以下调用错误的是B
A test(1)
B test(‘C’)
C test(2+‘d’);
D test(0.5)
解:0.5类型模糊,既匹配int类型也匹配float类型
4.有如下代码,result的最终结果是 11
#include<iostream>
using namespace std;
int i = 1;
class MyCls{
public:
MyCls():m_nFor(m_nThd),m_nSec(i++),m_nFir(i++),m_nThd(i++){
m_nThd = i;
}
//m_nFir(i++) m_nFir = 1 i = 2
//m_nSec(i++) m_nSec = 2 i= 3
//m_nThd(i++) m_nThd = 3 i= 4
//m_nFor(m_nThd) m_nFor= 4
//m_nThd = i; m_nThd = 4
void echo(){
cout<<"result:"<<m_nFir+m_nSec+m_nThd+m_nFor<<endl;
}
private:
int m_nFir;
int m_nSec;
int m_nThd;
int m_nFor;
};
int main()
{
MyCls oCls;
oCls.echo();
return 0;
}
解:
初始化的顺序就是声明的顺序,与初始化的列表顺序无关
m_nFir(i++) m_nFir = 1 i = 2
m_nSec(i++) m_nSec = 2 i= 3
m_nThd(i++) m_nThd = 3 i= 4
m_nFor(m_nThd) m_nFor= 4
m_nThd = i; m_nThd = 4
5.关于虚函数的知识点
(1)虚函数的定义:被virtua关键字修饰的成员函数,就是虚函数,可以有子类继承并重写的函数,后期绑定。java中普通的成员函数就是虚函数
(2)可以加上final关键字变成非虚函数
(3)如果不是纯虚函数,也就是基类不是抽象类的话,虚函数在子类中可以不实现