c ++的新手,你能解释一下这个构造函数的语法吗?

时间:2013-06-12 01:21:29

标签: c++

这可能是非常基本的,但是对于我来说,来自.Net背景的语法看起来有些陌生。我正在尝试学习c ++做一些爱好游戏开发,我在教程中遇到了这一行:

sf::RenderWindow window(sf::VideoMode(800, 600), "My Game");

对我来说,这看起来像RenderWindow可能是sf类的静态方法而窗口是实例名称?我无法搞清楚这一点或为谷歌提出良好的搜索条件。任何人都可以为我打破这条线吗?

另外,随意重命名标题,我不知道如何描述这一行,所以我无法想出一个描述性的标题。

6 个答案:

答案 0 :(得分:9)

  sf::RenderWindow window(sf::VideoMode(800, 600), "My Game");

它创建一个sf::RenderWindow的对象,对象的名称为window。它将通过将以下参数传递给window的构造函数来初始化sf::RenderWindow

第一个参数:

 sf::VideoMode(800, 600)

sf::VideoMode的对象,它由每个sf::VideoMode参考的sf类的相应构造函数/静态函数初始化;

  

VideoMode定义视频模式(宽度,高度,bpp,频率)并提供静态功能以获取显示设备支持的模式

第二个参数:

 "My Game"

是一个字符串,可能意味着窗口的标题(我猜),你可能需要找出如何定义类VideoMode

答案 1 :(得分:3)

该行声明并初始化名为window sf::RenderWindow的变量。

C ++中的类型具有构造函数,并且在创建变量时可以调用构造函数,例如这会创建一个名为x的整数,并将其初始化为值3

int x(3);

被调用的sf::RenderWindow类的构造函数接受sf::VideoModestring类型的变量。传递的第一个参数sf::VideoMode(800, 600)是创建类型sf::VideoMode的新实例并将其传递给函数的简写。它相当于:

sf::VideoMode mode(800, 600);
sf::RenderWindow window(mode, "My Game");

请注意以下内容中xy之间的差异:

Type x(3);
Type* y = new Type(3);

是在堆栈上分配x,而在堆上分配y。由于x在堆栈上,当变量超出范围时,它将被取消分配(并且将调用类型Type的析构函数)。 y会一直待到delete

答案 2 :(得分:0)

sf可以是命名空间或类

RenderWindow是函数window()

返回的类型

VideoMode是VideoMode类的构造函数(或者稍微有可能成为sf中的函数)

答案 3 :(得分:0)

我可以看到两件事。

sf是一个类,RenderWindow是一个静态类,VideoMode是类中的成员函数,或sf是一个名称空间,这些是类和或命名空间内的方法。如果这是我的钱,我可能会使用命名空间概念。

答案 4 :(得分:0)

可能......

sf::RenderWindow是一种类型,它是RenderWindow命名空间中的sf

window是您在此处声明的sf::RenderWindow类型变量的名称,()之间有用于构建window的构造函数的参数对象,最后一个是常量,第一个是sf::VideoMode(800, 600)返回的值。

答案 5 :(得分:-2)

您所指出的是对名为window的静态函数的调用。

电话:

sf::RenderWindow window(sf::VideoMode(800, 600), "My Game");

返回类型为sf::RenderWindow,该函数有两个参数sf::VideoMode(800, 600)和一个文字字符串"My Game"