只要把你的設置方法在默認的構造函數,如果你需要調用在任何其他構造函數;使用構造函數初始化列表:
class myclass{
public:
myclass(){ std::cout << "setup part" << std::endl; }
myclass(int x): myclass(){ /* calls myclass() first */ }
};
int main(int argc, char *argv[]){
myclass c0; // prints "setup part"
myclass c1{5}; // also prints "setup part"
}
這是最習慣的方式來做到這一點。
如果您需要延遲初始化;我喜歡用一個標籤的構造函數和init方法:
struct no_init_tag{};
no_init_tag no_init;
class myclass{
public:
myclass(int x){ init(x); }
myclass(no_init_tag){}
void init(int arg){ std::cout << "init with " << arg << std::endl; }
};
int main(int argc, char *argv[]){
myclass c0{5}; // prints "init with 5"
myclass c1{no_init}; // doesn't print
int n = 0;
// set 'n' somehow
c1.init(n); // prints "init with " then 'n'
}
這使得它,以便使用動態內存延遲初始化不是必需的,但還可以做。
只需使用一個構造函數,甚至不聲明'setup'方法。除非你需要延遲初始化,否則這是非常直觀的。 – CoffeeandCode
試着看看這個列表,以便你介紹到正確的C++,http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list – g24l
「它是如此之大和複雜,有很多非常糟糕的C++書籍 - 「哦,我有一些:D – mrv