怎样才能创建class
constructor
来计算活着的人数,如果我有10个人则应该计算活着的人数,人应该是对象在这个例子中,假设我有一个class man
,如下所示
class man{
private:
string name;
man(string name=""){
cout<<"there 10 people alive"<<endl;
~man(){}
};
int main(){
}
我对如何解决它感到困惑,我真的需要一个简单的例子我想使用set和get方法
答案 0 :(得分:2)
这个理智的版本是将man
个对象存储在一个集合中,比如std::vector
。从std::vector
开始,您可以在向量上使用size
来获取其中包含的项目数。
否则,请使用在此上下文中没有意义的解决方案,该解决方案将存储static
中增加的constructor
变量,并在destructor
中减少
顺便说一下,你的man
课有一些错误,constructor
是私密的,而你却缺少括号...这里是你正在寻找的简单版本:
class man
{
private:
std::string mName;
public:
man(std::string name="") : mName(name)
{
}
const std::string& GetName() const
{
return mName;
}
};
int main(int argc, char *argv[])
{
man Bob = man("Bob");
man Jimmy = man("Jimmy");
std::vector<man> men; // This will copy the man object, might want to consider using pointers
men.push_back(Bob);
men.push_back(Jimmy);
std::cout << "There is " << men.size() << " men." << std::endl;
std::cout << "Known men are:" << std::endl;
for(std::vector<man>::const_iterator itor = men.begin(); itor != men.end(); ++itor)
{
std::cout << itor->GetName() << std::endl;
}
// You could also iterate using something like for(unsigned int i = 0; i < men.size(); ++i)
}
修改强>:
让我们添加如何使用静态变量来处理它...请参阅以下场景(我折叠了大部分括号只是为了缩短它)
请参阅以下代码:
class man
{
private:
static unsigned int sCount;
std::string mName;
public:
man(std::string name="") : mName(name) { ++sCount; }
~man() { --sCount; }
const std::string& GetName() const { return mName; }
static unsigned int Count() { return sCount; }
};
unsigned int man::sCount = 0;
int main(int argc, char *argv[])
{
man Bob = man("Bob");
man Jimmy = man("Jimmy");
std::cout << "There is " << man::Count() << " men" << std::endl;
std::vector<man> men; // This will copy the man object, might want to consider using pointers
men.push_back(Bob);
men.push_back(Jimmy);
std::cout << "There is " << man::Count() << " men" << std::endl;
}
输出到
There is 2 men
There is 1 men
等等...... 什么?!?我们在哪里失去了男人?好吧,这发生在向量调整大小,因为我们没有定义copy constructor
,编译器为我们做了,但编译器不知道我们想要增加sCount
,所以当向量调整大小,创建新对象,破坏旧对象,sCount
未正确更新。
将我们的man
课程更改为:
class man
{
private:
static unsigned int sCount;
std::string mName;
public:
man(std::string name="") : mName(name) { ++sCount; }
man(const man& in_man) : mName(in_man.mName) { ++sCount; }
~man() { --sCount; }
const std::string& GetName() const { return mName; }
static unsigned int Count() { return sCount; }
};
我们现在有:
There is 2 men
There is 4 men
但为什么?!?。堆栈中有2个man
个对象,Bob
和Jimmy
。然后在std::vector<man> men
中有2个复制这些对象,因为该向量包含“man
类型的对象”。
如果我们将其更改为指针:
std::vector<man*> men;
men.push_back(&Bob);
men.push_back(&Jimmy);
我们现在有以下输出,这是我们正在寻找的:
There is 2 men
There is 2 men
希望这能为你解决问题!
答案 1 :(得分:0)
使用static
类字段来计算人数。
这些变量在给定类的所有对象之间共享,因此在构造函数中增加它并在析构函数中减少将计算“people”。