C++类内函数相互调用

以下是C++Primer课本中定义的一个类
class StrVec{
public:
StrVec() :elements(nullptr), first_free(nullptr), cap(nullptr){}
StrVec(const StrVec&);
StrVec& operator=(const StrVec&);
~StrVec();
void push_back(const std::string&);
std::size_t size() const{ return first_free - elements; }
std::size_t capacity() const{ return cap - elements; }
std::string *begin()const{ return first_free; }
std::string *end()const { return first_free; }
private:
static std::allocator <std::string>alloc;
//被添加元素的函数所使用
void chk_n_alloc(){
if (size() == capacity()) reallocate();//????????????????????????????????????????
}

//工具函数,被拷贝构造函数,赋值运算符和析构函数所使用
std::pair<std::string*, std::string*>alloc_n_copy(const std::string*, const std::string*);

void free(); //销毁元素并释放内存
void reallocate(); //获得更多的内存并拷贝已有的元素
std::string *elements; //指向数首元素的指针
std::string *first_free; //指向数组第一个空闲元素的指针
std::string *cap; //指向数组尾后位置的指针
};

文中注释问好的地方:为什么函数chk_n_alloc可以调用reallocate函数?编译chk_n_alloc函数的时候,reallocate函数应该还没有声明过吧?为什么可以调用一个没有声明过的函数啊

创建类只是建立一个模板,内部代码块的书写没有顺序要求;编译时编译器会把它们弄成一个标准化结构的东西。如果考虑你纠结的问题,那绝大多数类的写法都过不了编译,因为习惯上在类名后的public:后就写构造函数了,而常常这构造函数就要操作类中的private数据成员,而这private数据成员偏偏习惯上又是放在类的最后才声明的。这完全是个人理解,没有权威性,只供参考……
温馨提示:内容为网友见解,仅供参考
第1个回答  2017-10-04
在同一个类里的话,成员函数或者数据声明的顺序是无关紧要的,只要在这个类里声明过了就可以使用。
第2个回答  2017-11-16
类的声明结束后才会决议。
第3个回答  2017-11-10
C++类里面的函数和变量是不分先后顺序的,他们是平级的,这点和不使用类直接定义全局函数或者变量不同。
说的更深一点,因为类使用了{}来包含了它的函数和变量,它的域是有限的,可辨认的,所以在编译的时候,编译器会将这些变量和函数全部读取完毕之后再和这个类进行类似绑定的操作
第4个回答  2017-10-03
你 可以认为类成员函数知道类的完整定义,无论定义顺序如何
相似回答