类的两种实例化的方式

项目

程序
main.cpp
#include <iostream>
#include <string>
#include "Landowner.h"
using namespace std;
int main()
{
Landowner* ptr_Landower1 = new Landowner();
Landowner* ptr_Landower2 = new Landowner("傻不拉几改改熊");
Landowner* ptr_Landower3 = new Landowner("机智善勇红红狗");
ptr_Landower1 -> showInfo();
ptr_Landower2 -> showInfo();
ptr_Landower3 -> showInfo();
ptr_Landower1 ->TouchCard(20);
ptr_Landower2 ->TouchCard(20);
delete ptr_Landower1;
delete ptr_Landower2;
delete ptr_Landower3;
cout << "Hello world!" << endl;
return 0;
}
include\Landowner.h
#ifndef LANDOWNER_H
#define LANDOWNER_H
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Landowner
{
public:
Landowner();
Landowner(string);
Landowner(string, string, int, long);
virtual ~Landowner();
string GetNickName() { return m_NickName; }
void SetNickName(string val) { m_NickName = val; }
string GetSex() { return m_Sex; }
void SetSex(string val) { m_Sex = val; }
int GetGold() { return m_Gold; }
void SetGold(int val) { m_Gold = val; }
long GetExp() { return m_Exp; }
void SetExp(long val) { m_Exp = val; }
void TouchCard(int cardCount);
void InitCards();
void showInfo();
void showCards(const vector<int>&);
protected:
private:
string m_NickName;
string m_Sex;
int m_Gold;
long m_Exp;
vector<int> packCards;
vector<int> surplusCards;
vector<int> currCards;
bool isContains(int);
void deleteCard(vector<int>&, int);
string getColor(int);
string getValue(int);
};
#endif
src\Landowner.cpp
#include "Landowner.h"
#include <iostream>
#include <string>
#include <iterator>
#include <algorithm>
#include <cstdlib>
#include <ctime>
using namespace std;
Landowner::Landowner()
{
SetNickName("默认地主巨无霸");
SetSex("不告诉你");
SetGold(1000);
SetExp(0);
cout << "Landowner()" << endl;
InitCards();
}
Landowner::Landowner(string nickName) : m_NickName(nickName)
{
SetNickName(nickName);
SetSex("保密");
SetGold(1000);
SetExp(0);
cout << "Landowner(string)" << endl;
InitCards();
}
Landowner::Landowner(string nickName, string sex, int gold, long exp) : m_NickName(nickName),m_Sex(sex),m_Gold(gold),m_Exp(exp)
{
cout << "Landowner(string, string, int, long)" << endl;
InitCards();
}
void Landowner::showInfo()
{
cout << "昵称: " << GetNickName() << endl;
cout << "性别: " << GetSex() << endl;
cout << "金币: " << GetGold() << endl;
cout << "经验: " << GetExp() << "\n********************" << endl;
}
void Landowner::InitCards()
{
for(int i = 0; i < 54; i++)
{
packCards.push_back(i+1);
surplusCards.push_back(packCards.at(i));
}
currCards.clear();
}
void Landowner::showCards(const vector<int>& cards)
{
for(auto card : cards)
{
cout << card << "-" << getColor(card) << "-" << getValue(card) << ", ";
}
cout << endl;
}
void Landowner::TouchCard(int cardCount)
{
srand(time(NULL));
for(int i = 0; i < cardCount; i++)
{
int randIndex = rand() % 54;
if(isContains(packCards[randIndex]))
{
currCards.push_back(packCards[randIndex]);
deleteCard(surplusCards, packCards[randIndex]);
}
else
{
i--;
}
}
cout << "地主摸牌 当前手牌如下: \n";
showCards(currCards);
cout << "\n********************\n地主摸牌后 剩余牌面如下: \n";
showCards(surplusCards);
}
bool Landowner::isContains(int cardNum)
{
vector<int>::iterator iter = find(surplusCards.begin(), surplusCards.end(), cardNum);
if(iter == surplusCards.end())
{
return false;
}
else
{
return true;
}
}
void Landowner::deleteCard(vector<int>& cardVec, int card)
{
auto iter = find(cardVec.begin(), cardVec.end(), card);
if(iter != cardVec.end())
{
cardVec.erase(iter);
}
}
string Landowner::getColor(int card)
{
if(card == 53) return "小王";
if(card == 54) return "大王";
string colors[] = {"黑桃","红心","方块","梅花"};
return colors[(card-1)/13];
}
string Landowner::getValue(int card)
{
if(card == 53) return "Black Joker";
if(card == 54) return "Red Joker";
string values[] = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
return values[(card-1)%13];
}
Landowner::~Landowner()
{
cout << GetNickName() << "所占内存空间被释放\n";
}
运行结果
