我无法理解我用来学习C++的书中的代码实际发生了什么.这是代码:
class Base
{
public:
Base() {};
virtual ~Base() {};
virtual Base* Clone() {return new Base(*this);}
};
class Derived
{
public:
Derived() {};
virtual ~Derived() {};
virtual Base* Clone() {return new Derived(*this);}
};
Run Code Online (Sandbox Code Playgroud)
所以在这个Clone()函数中我理解该函数返回一个指向Base类对象的指针.我不明白的是该功能正在发生什么.当我以前使用new过时int *pInt = new int,我的印象是new基本上在免费存储上为整数分配足够的内存,然后返回该地址,将地址应用于指针pInt.使用相同的逻辑,我试图理解new Derived(*this)代码的一部分.所以,我认为它是在Derived类对象的免费存储上分配足够的内存,并返回该函数返回的地址Clone().
但是,为什么它会*this通过构造函数,如果它是构造函数?我理解*this它意味着它传递任何被克隆对象的地址,但我不理解函数class_name(address_of_an_object)上下文中的语法new.
有人可以解释一下这部分发生了什么吗?
提前致谢.
我正在尝试使用openGLbook.com教程.我得到这个常见的错误:
1>------ Build started: Project: OpenGL Startup, Configuration: Debug Win32 ------
1>Build started 1/25/2013 8:18:16 PM.
1>InitializeBuildStatus:
1> Touching "Debug\OpenGL Startup.unsuccessfulbuild".
1>ClCompile:
1> All outputs are up-to-date.
1>ManifestResourceCompile:
1> All outputs are up-to-date.
1>main.obj : error LNK2019: unresolved external symbol __imp__glewGetErrorString@4 referenced in function _Initialize
1>main.obj : error LNK2019: unresolved external symbol __imp__glewInit@0 referenced in function _Initialize
1>J:\Coding Projects\OpenGL 3.3 Tutorial\OpenGL Startup\Debug\OpenGL Startup.exe : fatal error LNK1120: 2 unresolved externals
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:00.07
========== Build: 0 …Run Code Online (Sandbox Code Playgroud) 我目前正在学习虚函数,在这个特殊课程中,它创建了一个对象指针数组firstArray[5],并从这些对象中调用函数.到现在为止,每当我想func()从一个对象调用一个函数时foo,我都会写foo.func().现在我正在使用虚函数和这个数组,本书已经转向这种方法:firstArray[0]->func().这本书在证明这种转换方面没有做得很好,有人可以解释一下吗?我看到当我尝试使用时firstArray[0].func(),我得到了这个....
error: request for member 'func' in 'firstArray[0]', which is of non-class type 'sampleClass*'.
这只是因为我试图从指针调用函数,而不是实际的对象?我已经学习了几个月的C++,无论出于何种原因,指针仍然会让我感到沮丧.任何澄清都会有所帮助.
编辑:
我认为让我混淆的部分是这样的:我可以创建一个指向基础对象类的指针base *ptr;.然后,我可以通过说明从派生类创建一个新对象来设置该指针ptr = new derived;.这是我感到困惑的地方.如果我要创建一个int* ptr;,我希望它指向我创建的整数,我不能说ptr = int j.如果ptr真的只是一个地址,为什么这两个例子的工作方式不同?我想我也不太了解"新"机制.
我正在用c ++制作一个接受极高值的计算器.我为数字创建了一个类,我在标题中定义了它.我的第一个cpp文件包含基本函数,如add,subtract,multiply和divide (link).我的第二个cpp文件包含类定义,允许我根据需要操作数字对象(链接).我的第三个cpp文件是main,它还没有多少(链接).我正在尝试使用以下方法将这些文件链接在一起:
g++ -o bignumbers bignum_funcdefs.cpp bignum_classdefs.cpp main.cpp
Run Code Online (Sandbox Code Playgroud)
根据我的阅读,以这种方式通过g ++传递多个文件与一次传递一个文件没什么不同.显然问题是bignum_classdefs.cpp需要bignum_funcdefs.cpp中的函数,但我不知道如何使它们可访问.我也试过这个:
g++ -c bignum_funcdefs.cpp
g++ -c bignum_classdefs.cpp bignum_funcdefs.o
Run Code Online (Sandbox Code Playgroud)
但这给了我同样的错误,即funcdefs中的函数尚未定义.我是以错误的方式来做这件事的吗?有没有办法让这些文件以它们的方式工作?有没有更好的方法来构建我的cpp文件,类和标头?整个回购都可以在这里找到,任何建议都非常感谢.使用我的代码的具体建议将有助于更多.