一些c++的常见问题(系列一)

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;
}
发布了81 篇原创文章 · 获赞 4 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/m0_37313888/article/details/105196507