2017-09-14 55 views
0

我是C++类的新手,我对嵌套类有一些疑问。初始化嵌套类中的类变量

我知道什么是用C

  1. 类++设置由“私人”默认设置变量和函数。
  2. 当您创建一个类时,会创建一个对象。
  3. 我理解构造函数的基本概念。

我知道我可以做“类”作为在另一个“阶级”的变量,也被称为嵌套类,但我真的无法弄清楚它是如何准确地完成。如果我创建一个嵌套类,它是否创建对象本身,并从嵌套类内的类变量创建对象?

我在使用构造函数初始化嵌套类中的类变量时出现问题。

例如

class Point { 
int xpos; 
int ypos; 
} 

比方说,我创建了一个包含2个int变量a类。

class Rectangle { 
Point upLeft; 
Point lowRight; 
} 

然后,我创建了一个具有2'Point class'作为变量的Rectangle类。

Rectangle rec1; 

然后,我创建的对象REC1

如何初始化2 xpos和2ypos使用构造函数在Rectangle类中?

+0

你会[找到答案在这里你的问题(https://stackoverflow.com/questions/388242/the-definitive -C-书指南和列表)。 –

+0

抓住你的课本,查找“成员初始化列表”。 – user4581301

+0

“嵌套类”是指在C++中完全不同的东西,在这里你不这样做。你有什么“有班级类型的成员”。 “当你创建一个类时,一个对象被创建”令人困惑,而且不真实。我认为你的意思是“当你使用类类型定义一个变量时,会创建一个对象。” (请注意,“对象”也是一个技术术语,它不仅限于类的类型!具有像int或double这样的基本类型的变量,指针类型或数组类型也都是名称对象。) – aschepler

回答

0

您需要添加一个构造函数,这里是一个简单的例子:

class Point { 
public: 
    Point(int x, int y) : xpos(x), ypos(y) {} 
private: 
    int xpos; 
    int ypos; 
}; 


class Rectangle { 
public: 
    Rectangle(int x1, int y1, int x2, int y2) : upLeft(Point(x1, y1)), lowRight(Point(x2, y2)) {} 
private: 
    Point upLeft; 
    Point lowRight; 
}; 
+2

请注意,它不是'在构造“矩形”中的点之前构建一个临时的“点”,因为您可以直接使用upLeft(x1,y1)而不是使用upLeft(Point(x1,y1))。 (对于像这样的简单情况并不重要,但对于较大的对象或没有移动或复制构造函数的对象,这可能很重要)。 – Mankarse