1.内联成员函数可以写成虚函数吗??重写可以写成仅返回值不同吗??
没有意义,因为运行的时候还是动态绑定。。。
#include <iostream>
using namespace std;
class A
{
public:
virtual void p() ;
};
class B: public A
{
public:
void p();
};
inline void A::p() { cout << "A" << endl; }
inline void B::p() {cout << "B" << endl;}
int main()
{
A* ptr = new B;
ptr->p();
delete ptr;
return 0;
}
结果: B
重写不能写成仅返回值不同,不然编译器会报错。。
2.可以用多个using编译指令吗?如果这些namespace里面有名称重复的变量怎么办?
1.可以用多个using编译指令
2.有重复的话会编译报错
3.静态成员变量的定义?声明?初始化?
class A
{
private:
static int a;
};
int A:: a = 2;
可以在int main()或其他函数中初始化吗?
不能!!必须在.cpp里面全局初始化
4.const成员函数
const成员函数不能调用非const成员函数
const对象只能调用const成员函数
5.构造函数可以定义为const的吗?
坚决不能,因为编译器会将成员变量修改为随机值
6.析构函数可以定义为const的吗?
坚决不能
7.哪些成员不能被继承??
构造函数(包括拷贝构造)
析构函数
重载的赋值运算符
友元
重载的其他的运算符呢?
可以被继承
class A
{
protected:
unordered_map<int, int> m;
public:
int operator[](int a) { return m[a]; }
};
class B :public A
{
public:
B() {}
B(int key, int val) { m[key] = val; }
};
int main()
{
B b(1, 2);
cout << b[1] << endl; // 直接打印2, 没问题
return 0;
}
8.哪些函数不能写成虚函数?
普通函数和友元函数(这两个都不是成员函数)
静态成员函数
构造函数
想直接按照内联函数展开
9.重载的运算符可以写成虚函数吗?
可以
10.什么是部分具体化?
template <class T>
void func(T& a, int b)
{
cout << "func int" << endl;
}
template <class T>
void func(T& a, float b)
{
cout << "func float" << endl;
}
int main()
{
int a = 1;
int aa = 1;
float bb = 1.0;
func(a, aa); // func(T&a, int n);
func(a, bb); // func(T&a, float n);
return 0;
}