1. 使用对象类型作为函数的参数或返回值,会存在什么问题吗?
- 一般情况下不推荐使用
对象类型作为函数的参数或返回值,因为可能会产生一些不必要的中间对象
2. C++中的隐式构造是什么?
Animal a1(10);
Animal a2 = 10;
3. 默认构造什么时候会生成?下面代码 m_age 的值什么时候会被初始化?
class Animal {
public:
int m_age = 10;
};
- 总结:
创建一个对象的时候,如果有事情要干(比如初始化成员变量、创建虚表)就会生成默认构造函数
m_age 的值会在生成的默认构造方法中生成
4. 友元函数什么时候使用?
- 需要在函数内,访问其他类的私有成员变量时,可以将该函数声明为
友元函数
5. 什么时候使用内部类?
- 当你需要对一个类的访问权限进行控制的时候,就使用
内部类
- 内部类不会影响外部类内存结构,换句话说内部类只是编译器的语法糖
6. 什么是局部类?
7. 厦门函数的打印结果是什么?
#include <iostream>
using namespace std;
class Car;
class Person;
class Person {
public:
int m_height;
Person(){
cout << "Person 无参数构造函数被调用" << endl;
};
Person(const Person &c) {
cout << "Person 拷贝构造函数被调用了" << endl;
}
void run() {
cout << "Person run" << endl;
}
~Person() {
cout << "~Person 析构函数被调用" << endl;
}
};
class Car {
public:
int m_age;
Person m_owner;
Car(){
cout << "Car 无参数构造函数被调用" << endl;
};
Car(const Car &c) {
cout << "Car 拷贝构造函数被调用了" << endl;
}
void run() {
cout << "Car run" << endl;
}
~Car() {
cout << "~Car 析构函数被调用" << endl;
}
};
int main() {
cout << "main 1" << endl;
Car *c1 = new Car();
cout << c1->m_owner.m_height << endl;
cout << c1->m_age << endl;
cout << "main 2" << endl;
delete c1;
return 3;
}
- 这个问题主要理解
类对象实例c1中有非指针类型的对象实例m_owner,非指针类型的成员变量,声明周期会跟随对象实例的生命周期。
- 打印结果如下
main 1
Person 无参数构造函数被调用
Car 无参数构造函数被调用
0
0
main 2
~Car 析构函数被调用
~Person 析构函数被调用