MST

星途 面试题库

面试题:C++ 中构造函数与普通函数声明形式对比基础

请阐述 C++ 构造函数与普通函数在声明形式上有哪些主要区别?并举例说明构造函数在类初始化中的作用。
30.8万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

声明形式区别

  1. 函数名
    • 构造函数:函数名与类名完全相同。例如,定义一个名为MyClass的类,其构造函数也叫MyClass
    class MyClass {
    public:
        MyClass();//构造函数
    };
    
    • 普通函数:函数名可自定义,只要符合C++标识符命名规则即可,不必与类名相关。例如:
    class MyClass {
    public:
        void myFunction();//普通函数
    };
    
  2. 返回值类型
    • 构造函数:没有返回值类型,包括void也不能有。例如:
    class MyClass {
    public:
        MyClass() { } //正确,无返回值类型
        //MyClass() void { } //错误,不能有返回值类型
    };
    
    • 普通函数:必须有返回值类型,若没有返回值则声明为void。例如:
    class MyClass {
    public:
        void myFunction() { } //返回值类型为void
        int anotherFunction() { return 0; } //返回值类型为int
    };
    
  3. 调用方式
    • 构造函数:在创建类的对象时由系统自动调用,无需手动显式调用。例如:
    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对象时被自动调用,用于初始化对象的成员变量xy。如果没有构造函数,成员变量xy将处于未初始化状态,可能导致程序出现未定义行为。构造函数确保了对象在创建时其成员变量就处于一个确定的、合理的初始状态。