面试题答案
一键面试声明形式区别
- 函数名:
- 构造函数:函数名与类名完全相同。例如,定义一个名为
MyClass
的类,其构造函数也叫MyClass
。
class MyClass { public: MyClass();//构造函数 };
- 普通函数:函数名可自定义,只要符合C++标识符命名规则即可,不必与类名相关。例如:
class MyClass { public: void myFunction();//普通函数 };
- 构造函数:函数名与类名完全相同。例如,定义一个名为
- 返回值类型:
- 构造函数:没有返回值类型,包括
void
也不能有。例如:
class MyClass { public: MyClass() { } //正确,无返回值类型 //MyClass() void { } //错误,不能有返回值类型 };
- 普通函数:必须有返回值类型,若没有返回值则声明为
void
。例如:
class MyClass { public: void myFunction() { } //返回值类型为void int anotherFunction() { return 0; } //返回值类型为int };
- 构造函数:没有返回值类型,包括
- 调用方式:
- 构造函数:在创建类的对象时由系统自动调用,无需手动显式调用。例如:
MyClass obj; //创建对象时自动调用构造函数
- 普通函数:需要在代码中通过对象名(对于非静态成员函数)或类名(对于静态成员函数)显式调用。例如:
MyClass obj; obj.myFunction(); //通过对象名调用普通成员函数
构造函数在类初始化中的作用举例
class Point {
private:
int x;
int y;
public:
Point(int a, int b) {
x = a;
y = b;
}
void printPoint() {
std::cout << "(" << x << ", " << y << ")" << std::endl;
}
};
int main() {
Point p(3, 5); //创建Point对象时调用构造函数初始化x和y
p.printPoint(); //输出: (3, 5)
return 0;
}
在上述代码中,Point
类的构造函数Point(int a, int b)
在创建Point
对象时被自动调用,用于初始化对象的成员变量x
和y
。如果没有构造函数,成员变量x
和y
将处于未初始化状态,可能导致程序出现未定义行为。构造函数确保了对象在创建时其成员变量就处于一个确定的、合理的初始状态。