所以基本上我正在從本書中學習遊戲編程,目前我正在解釋數據成員是指向存儲對象的指針的位置在堆上。然後執行一些成員函數,如銷燬/複製或分配給另一個對象。我的功能如何連接到正確的成員函數
所以基本上我想明白的是,當我打電話三種功能「testDestructor()
‘/’testCopyConstructor(Critter aCopy)
」和「testAssignmentOp()
」會自動將正確的成員函數,這聽起來很傻,但除非我誤解的東西,我沒有看到這本書解釋了每種功能如何去正確的成員功能。
我不知道它的晚上11點30分,也許我的大腦已經融化了,但我已經重讀了整個(幾頁)關於程序中發生了三次最新情況的詳細解釋,而且我無法做出正面或反面的如何它正確地使用正確的成員函數沒有某種「連接」?也許我錯過了一些基本的東西。
PS我明白了什麼是與代碼本身發生的事情,我只是不知道如何函數調用正確的成員函數
/Heap Data Member
//Demonstrates an object with a dynamically allocated data member
#include <iostream>
#include <string>
using namespace std;
class Critter
{
public:
Critter(const string& name = "", int age = 0);
~Critter(); //destructor prototype
Critter(const Critter& c); //copy constructor prototype
Critter& Critter::operator=(const Critter& c); //overloaded assignment op
void Greet() const;
private:
string* m_pName;
int m_Age;
};
Critter::Critter(const string& name, int age)
{
cout << "Constructor called\n";
m_pName = new string(name);
m_Age = age;
}
Critter::~Critter() //destructor definition
{
cout << "Destructor called\n";
delete m_pName;
}
Critter::Critter(const Critter& c) //copy constructor definition
{
cout << "Copy Constructor called\n";
m_pName = new string(*(c.m_pName));
m_Age = c.m_Age;
}
Critter& Critter::operator=(const Critter& c) //overloaded assignment op def
{
cout << "Overloaded Assignment Operator called\n";
if (this != &c)
{
delete m_pName;
m_pName = new string(*(c.m_pName));
m_Age = c.m_Age;
}
return *this;
}
void Critter::Greet() const
{
cout << "I'm " << *m_pName << " and I'm " << m_Age << " years old. ";
cout << "&m_pName: " << cout << &m_pName << endl;
}
void testDestructor();
void testCopyConstructor(Critter aCopy);
void testAssignmentOp();
int main()
{
testDestructor();
cout << endl;
Critter crit("Poochie", 5);
crit.Greet();
testCopyConstructor(crit);
crit.Greet();
cout << endl;
testAssignmentOp();
return 0;
}
void testDestructor()
{
Critter toDestroy("Rover", 3);
toDestroy.Greet();
}
void testCopyConstructor(Critter aCopy)
{
aCopy.Greet();
}
void testAssignmentOp()
{
Critter crit1("crit1", 7);
Critter crit2("crit2", 9);
crit1 = crit2;
crit1.Greet();
crit2.Greet();
cout << endl;
Critter crit3("crit", 11);
crit3 = crit3;
crit3.Greet();
}
「數據成員是指向對象存儲在堆上的指針」笏 – Barry
也許我應該有寫爲「我正在使用的數據成員是指向存儲在堆中的對象的指針」。 – Collwyr