What is a static constructor?

后端 未结 13 1825
天涯浪人
天涯浪人 2020-11-27 03:46

This question was asked to me in an interview:

What is a static constructor?

Does it exist in C++? If yes, please explain it wit

13条回答
  •  情歌与酒
    2020-11-27 04:03

    A static constructor is used to initialize static data of a class. C++ doesn't have static constructor. But a static constructor can be emulated by using a friend class or nested class as below.

    class ClassStatic{
    private:
        static char *str;
    public:
        char* get_str() { return str; }
        void set_str(char *s) { str = s; }
        // A nested class, which used as static constructor
        static class ClassInit{
        public:
            ClassInit(int size){ 
                // Static constructor definition
                str = new char[size];
                str = "How are you?";
            }
        } initializer;
    };
    
    // Static variable creation
    char* ClassStatic::str; 
    // Static constructor call
    ClassStatic::ClassInit ClassStatic::initializer(20);
    
    int main() {
        ClassStatic a;
        ClassStatic b;
        std::cout << "String in a: " << a.get_str() << std::endl;
        std::cout << "String in b: " << b.get_str() << std::endl;
        a.set_str("I am fine");
        std::cout << "String in a: " << a.get_str() << std::endl;
        std::cout << "String in b: " << b.get_str() << std::endl;
        std::cin.ignore();
    }
    

    Output:

    String in a: How are you?
    String in b: How are you?
    String in a: I am fine
    String in b: I am fine
    

提交回复
热议问题