如何访问无参数名的binMinHeap默认构造函数参数?
如何访问C++类声明中省略名字的参数
嘿,这个问题我之前也碰到过,其实C++的语法已经帮我们留好了口子,完全不需要头疼!
核心思路:函数声明的参数名是可选的,实现时可以补全
教授给的类声明里binMinHeap(int = 10)只是省略了参数的名字,但这并不意味着参数不存在——你在实现构造函数的时候,完全可以给这个参数加上一个名字(比如你习惯的capacity),编译器会自动把它和声明里的参数对应起来。
具体实现方式
1. 类外部实现构造函数(推荐,分离声明和定义)
假设教授给的类声明是这样的(补全模板和成员变量部分):
template <typename Type> class binMinHeap { public: binMinHeap(int = 10); // 教授的声明,无参数名 // 其他成员函数... private: int capacity; int size; Type* heapArray; };
你可以在类外面这样实现构造函数,直接给参数加上名字capacity:
template <typename Type> binMinHeap<Type>::binMinHeap(int capacity) { this->capacity = capacity; // 正常使用参数 this->size = 0; // 初始化size为0,符合最小堆初始状态 this->heapArray = new Type[capacity]; // 分配数组 }
这样做完全符合C++语法,而且没有修改教授给的任何代码。
2. 类内部直接实现构造函数
如果想把构造函数写在类里面,也可以直接在参数列表里补上名字:
template <typename Type> class binMinHeap { public: // 直接给参数加名字capacity,保留默认值10 binMinHeap(int capacity = 10) { this->capacity = capacity; this->size = 0; heapArray = new Type[capacity]; } // 其他成员... private: int capacity; int size; Type* heapArray; };
这同样是合法的,编译器会识别这个带名字的参数就是声明里那个带默认值的参数。
题外话:极端情况的处理(不推荐)
如果真的遇到不能补参数名的场景(比如某些特殊的编译器要求),部分编译器(如GCC)支持用__1、__2这样的内置标识符来引用第N个无名参数,但这种方式不跨编译器,也不直观,所以强烈建议用上面补参数名的方法。
总结一下:教授的声明只是省略了参数名,你在实现时补上名字就可以正常使用了,完全不需要修改教授的代码,放心用就行~
内容的提问来源于stack exchange,提问作者101001
相关产品推荐
相关产品推荐

