如何实例化属于类的对象? [复制]
Posted
技术标签:
【中文标题】如何实例化属于类的对象? [复制]【英文标题】:How to instantiate objects which are members of a class? [duplicate] 【发布时间】:2014-05-26 06:15:47 【问题描述】:在下面的代码中,如何实例化Rectangle
类的Side
对象?
class Side
int l;
public:
Side(int x)
l=x;
class Rectangle
Side a, b;
public:
Rectangle(int s1, int s2)
//How to initialize a and b?
【问题讨论】:
To instantiate 就是创建这样一个对象。 初始化就是给它一个值。你问的是哪个? 我猜两者都有?但我认为它已经在下面得到了回答。 【参考方案1】:一旦您实例化它们所属的类的对象,所有数据成员就会被实例化。但是您似乎在问初始化,或者至少在调用拥有它们的类的构造函数后如何确保数据余烬具有一定的值。
初始化构造函数初始化列表中的成员是最有意义的*:
Rectangle(int s1, int s2) : a(s1), b(s2)
请注意,您仍然可以在初始化后的任何时候修改数据成员。在本例中,使用了 assignment:
a = Side(1);
b = Side(42);
* 在这种情况下,如果要保留Rectangle
的构造函数,则没有选项,因为Side
没有默认构造函数。如果没有显式构造构造函数的初始化列表中的成员,它们的默认构造函数会被隐式调用,所以它们必须是默认可构造的。
【讨论】:
+1 用于初始化列表,而不是在构造函数的主体中 @MattCoubrough 在正文中初始化不起作用,因为 Side 没有默认构造函数。 @nwp,没错!因此 +1。 我尝试不使用初始化列表,然后将a = Side(1);
和 b = Side(42);
放入构造函数 Rectangle()
,但随后出现“没有匹配的 Side::Side() 调用错误” .这是否意味着a
和b
没有被实例化,因为Side
没有默认构造函数?
@user1726 见脚注。这并不意味着你的想法,因为代码没有编译:-)以上是关于如何实例化属于类的对象? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
当子类被实例化时,超类的私有成员是不是也被实例化? [复制]
(JAVA)啥是实例化如何实现类的实例化(用类或方法创建一个该类的实例)?