C++面试题

多一些不为什么的坚持 / 2023-06-11 / 原文

1、当使用C++编写代码时,有一个常见的问题是如何在子类中调用父类的构造函数。下面是一个相关的C++面试题:

题目: 假设有一个基类Animal,其中包含一个带参数的构造函数和一个公共成员函数display()。请编写一个派生类Dog,继承自Animal,并实现自己的构造函数和display()函数

要求:

  • Dog类的构造函数应接受两个参数:name(狗的名字)和age(狗的年龄)。构造函数应该在初始化Dog对象时调用Animal类的构造函数,并将name参数传递给Animal类的构造函数来初始化基类的成员变量。
  • Dog类的display()函数应输出狗的名字和年龄。

示例代码:

#include <iostream>
#include <memory>
#include <iostream>


class Animal {
protected:
    std::string name;

public:
    Animal(const std::string& n) : name(n) {
        std::cout<<"1111111"<<std::endl;
    }

    void display() {
        std::cout << "Name: " << name << std::endl;
    }
};



class Dog : public Animal {
private:
    int age;
public:
    Dog(const std::string& n, int a) : Animal(n), age(a) {
        std::cout<<"222222"<<std::endl;
    }

    void display() {
        Animal::display();
        std::cout << "Age: " << age << std::endl;
    }
};


class Cat : public Animal {
private:
    int age;
public:
    Cat(const std::string& n, int a) : Animal(n), age(a) {
        std::cout<<"3333333333"<<std::endl;
    }

    void display() {
        Animal::display();
        std::cout << "Age: " << age << std::endl;
    }
};

int main(){
    Dog dog("Buddy", 3);
    Cat cat("axis", 4);
    dog.display();
    cat.display();
    return 0;
}

输出:

1111111
3333333333
Name: Buddy
Age: 3
Name: axis
Age: 4

两个派生类分别继承了基类,但是对于基类互相不影响,先调用基类的构造函数。

1111111
3333333333
Name: Buddy
Age: 3
Name: axis
Age: 4