我的函数如何连接到正确的成员函数
How are my functions connected to the right member function
所以基本上我是从这本书中学习游戏编程的,我目前正在解释数据成员是指向堆上存储的对象的指针。然后它执行一些成员功能,例如销毁/复制或分配给另一个对象。
所以基本上,我试图理解的是,当我调用三个函数"testDestructor()
"/"testCopyConstructor(Critter aCopy)
"answers"testAssignmentOp()
"时,它会自动转到正确的成员函数,这听起来可能很傻,但除非我误读了什么,否则我看不到这本书解释了每个函数是如何转到正确的子函数的。
我不知道现在是晚上11点30分,也许我的大脑已经融化了,但我已经把这个完整的(几页(关于程序中发生的事情的详细解释重读了三遍,如果没有某种"联系",我就无法理解它是如何正确使用正确的成员函数的?也许我错过了一些基本的东西。
p.S我理解代码本身发生了什么,我只是不知道函数是如何调用正确的成员函数的
/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 calledn";
m_pName = new string(name);
m_Age = age;
}
Critter::~Critter() //destructor definition
{
cout << "Destructor calledn";
delete m_pName;
}
Critter::Critter(const Critter& c) //copy constructor definition
{
cout << "Copy Constructor calledn";
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 calledn";
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();
}
我不太确定你在问什么,但是:
赋值运算符在表达式中使用=
时调用,例如在代码中:
crit1 = crit2;
crit3 = crit3;
不要与在声明中使用=
符号混淆(无论如何都不会这样做(。
当您尝试创建对象时,会调用构造函数,例如:
Critter crit2( "crit1", 7 ); // constructor
其他线路可能看起来像:
Critter crit4; // default constructor
Critter crit5(crit3); // copy-constructor
如果构造函数的一个参数是同一类型的另一个对象,则称为复制构造函数。这只是一个术语问题,复制构造函数和其他构造函数之间没有更根本的区别。
在函数void testCopyConstructor(Critter aCopy)
中,可以看到它有一个参数Critter aCopy
。当您将参数crit
传递给函数时,就像您使用函数参数创建参数一样:
Critter aCopy(crit); // equivalent
因此调用此函数将使用其复制构造函数初始化CCD_ 9。
每当局部对象超出作用域时,就会调用析构函数,因此当在testDestructor
结束时到达}
时,对象toDestroy
就会被销毁。
我试图理解的是,当我调用"testDestructor(("/"testCopyConstructor(Critter aCopy("answers"testAssignmentOp(("这三个函数时,它是如何自动转到正确的成员函数的,这听起来可能很傻,但除非我误读了什么,否则我看不到这本书解释了每个函数是如何转到正确成员函数的。
实例(非static
(成员函数总是传递一个隐藏指针作为它们的第一个参数——在名为this
的类中显式可用——它引用目标对象。这意味着,当在类(对象(的任何实例上/中调用成员函数时,对成员变量的任何范围内引用都将通过指针指向this
实例。
(这是有据可查的,并不需要新的问题。希望你的书在其他地方提到它!(
- 如何使用指针传递给函数的数组中对象的函数成员
- c++构造函数成员初始化:传递参数
- 创建 std::函数,它返回具有函数成员值的变量.分段错误
- 如何在C++通过公共函数访问私有函数成员?
- 解释了构造函数成员初始化列表
- 调用std::函数成员时内存损坏
- 是否可以为模板类的模板函数成员设置别名?
- 捕获 lambda 函数C++成员变量
- 构造函数成员初始值设定项跨成员列出,安全吗?
- 获取与在模板参数中传递的函数成员类型相同的类
- 如何从公共函数成员访问地图私有成员
- C 构造函数成员分配优化
- 使用命名空间进行函数成员定义
- 函数成员作为 CUDA 内核的参数
- 模板基类函数成员的别名
- 函数成员中用于void和继承的enable_if
- 头文件中是否定义了一个很长的Class函数成员
- 类内/构造函数成员初始化
- 使用指向部分专用函数成员的指针自动填充向量
- 指向函数成员的指针