1. C++ 中创建出来的对象可以放在几个地方?
全局区(数据段):全局变量
栈区:函数里面的局部变量
堆区:动态申请内存(malloc、new 等)
2. 构成函数什么时候被调用?通常拿来完成什么事情?C++调用 malloc 申请对象内存会调用构造函数吗?
- 构造函数:
在对象创建的时候会自动调用,一般用于完成对象的初始化操作。
- 通过
malloc 分配的对象不会调用构造函数
3. C++ 中如果没有自定义构造函数,编译器会默认生成一个无参的构造函数吗?
不一定,需要分场景
正确定义:在某些特定的情况下,编译器才会为类生成空的无参的构造函数
struct Person {
int m_age;
};
int main() {
Person person;
person.m_age = 10;
return 0;
}
struct Person {
int m_age = 0;
};
int main() {
Person person;
person.m_age = 10;
return 0;
}
4. 思考下面的代码:调用了几次无参构造函数?调用了几次有参构造函数?
#include <iostream>
using namespace std;
struct Person {
int m_age;
Person() {
cout << "Person::Person" << endl;
}
Person(int age) {
m_age = age;
cout << "Person::Person(int age)" << endl;
}
};
Person person;
Person person1();
Person person2(10);
int main() {
Person person;
Person person1();
Person person2(20);
Person *p0 = new Person;
Person *p1 = new Person();
Person *p2 = new Person(30);
return 0;
}
- 结果如下:
调用了 4 次无参构造函数;3 次有参构造函数
- 注意点:
其中有两个是函数声明啊
Person::Person
Person::Person(int age)
Person::Person
Person::Person(int age)
Person::Person
Person::Person
Person::Person(int age)
Program ended with exit code: 0
5. 什么是析构函数?通过 malloc 的对象,在 free 的时候会调用析构函数吗?
- 析构函数:
对象销毁之前会自动调用的函,通常在函数中做一些内存的释放工作
- 通过 malloc 的对象,在 free 的时候
不会调用析构函数
6. 什么是声明和实现的分离?有什么用?
明放在 .h 文件中,实现放在.cpp 文件中
- .h 文件只有方法的声明,在.cpp 中用
Person::setAge(){}这种方式进行方法实现
作用:可以只对外暴露声明,而隐藏代码的具体实现。
7. C++如何定义命名空间?如何使用命名空间?命名空间的本质是什么?有一个默认命名空间如何调用?
- 定义:
namespace LP {int g_age;}
- 使用:
using namespace LP; 或者 using LP::g_age
- 本质:
类似 OC 的做法,给命名空间内的东西加上前缀
- 默认命名空间:
也就是全局命名空间,调用如下 ::func()
g_age = 13;
LSP::g_age = 14;
mov cs:_g_age, 0Dh
mov cs:__ZN3LSP5g_ageE, 0Eh ; LSP::g_age
8. 继承的作用?
作用:继承就是把公共的数据和方法抽取到父类中,子类中放各自独有的数据和方法,从而实现代码的复用
- C++ 中的继承,就相当于将父类的代码,
直接剪贴到子类的头部
9. 成员访问权限、继承方式有三种权限,是哪三种?
public:公共的,任何地方都可以访问(struct 默认)
protected:子类内部、当前类内部可以访问
private:私有的,只有当前类内部可以访问(class 默认)
10. 子类内部访问父类成员变量的权限,是哪两种权限综合决定的?
- 子类内部访问父类成员的权限,是以下 2 项中
权限最小的那个决定的
成员本身的在父类的访问权限
子类继承父类时的访问权限
11. struct 的默认继承方式的访问权限是什么?class 的呢?
- struct 默认是 public 继承
- class 默认是 private 继承
- 所以经常看到类似代码:
class Student : Public People{}