标签: object-construction

为什么我更喜欢使用成员初始化列表?

我偏向于使用我的构造函数的成员初始化列表......但我早就忘记了这背后的原因......

您是否在构造函数中使用成员初始化列表?如果是这样,为什么?如果没有,为什么不呢?

c++ oop object-construction

212
推荐指数
6
解决办法
13万
查看次数

如何在构造函数中初始化C++对象成员变量?

我有一个类有几个对象作为成员变量.我不希望在声明时调用这些成员的构造函数,所以我试图明确地挂起指向该对象的指针.我不知道我在做什么.O_O

在StackOverflow上,我似乎能够找到对象成员变量的其他示例,但通常会立即调用构造函数,如下所示:

class MyClass {
    public:
        MyClass(int n);
    private:
        AnotherClass another(100); // this constructs AnotherClass right away!
};
Run Code Online (Sandbox Code Playgroud)

但我希望MyClass构造函数调用AnotherClass构造函数.这是我的代码的样子:

BigMommaClass.h

#include "ThingOne.h"
#include "ThingTwo.h"

class BigMommaClass {

        public:
                BigMommaClass(int numba1, int numba2);

        private:
                ThingOne* ThingOne;
                ThingTwo* ThingTwo;
};
Run Code Online (Sandbox Code Playgroud)

BigMommaClass.cpp

#include "BigMommaClass.h"

BigMommaClass::BigMommaClass(int numba1, int numba2) {
        this->ThingOne = ThingOne(100);
        this->ThingTwo = ThingTwo(numba1, numba2);
}
Run Code Online (Sandbox Code Playgroud)

这是我尝试编译时遇到的错误:

g++ -Wall -c -Iclasses -o objects/BigMommaClass.o classes/BigMommaClass.cpp
In file included from classes/BigMommaClass.cpp:1:0:
classes/BigMommaClass.h:12:8: error: declaration of âThingTwo* BigMommaClass::ThingTwoâ
classes/ThingTwo.h:1:11: error: changes …
Run Code Online (Sandbox Code Playgroud)

c++ constructor object-construction class-members

66
推荐指数
4
解决办法
14万
查看次数

如果在一行中声明了两个对象,它们的构造顺序是什么?

假设一个类被定义为

class A {
//.....
};
Run Code Online (Sandbox Code Playgroud)

现在我正在创建两个对象

A a,b;
Run Code Online (Sandbox Code Playgroud)

按照什么顺序ab创造的呢?它是由标准定义的吗?

c++ declaration object-construction language-lawyer

63
推荐指数
5
解决办法
4248
查看次数

JavaScript:使用没有运算符'new'的构造函数

请帮助我理解以下代码的工作原理:

<script>
    var re = RegExp('\\ba\\b') ;
    alert(re.test('a')) ;
    alert(re.test('ab')) ;
</script>
Run Code Online (Sandbox Code Playgroud)

在第一行没有new运营商.

据我所知,JavaScript中的一个构造函数是一个初始化运算符创建的对象的函数,new它们并不意味着返回任何东西.

javascript constructor new-operator object-construction

27
推荐指数
2
解决办法
5642
查看次数

如何以优雅的方式初始化具有大量字段的类?

在我的应用程序中,我必须实例化许多不同类型的对象.每种类型都包含一些字段,需要添加到包含类型中.我怎样才能以优雅的方式做到这一点?

我当前的初始化步骤看起来像这样:

public void testRequest() {

        //All these below used classes are generated classes from xsd schema file.

        CheckRequest checkRequest = new CheckRequest();

        Offers offers = new Offers();
        Offer offer = new Offer();
        HotelOnly hotelOnly = new HotelOnly();
        Hotel hotel = new Hotel();
        Hotels hotels = new Hotels();
        Touroperator touroperator = new Touroperator();
        Provider provider = new Provider();
        Rooms rooms = new Rooms();
        Room room = new Room();
        PersonAssignments personAssignments = new PersonAssignments();
        PersonAssignment personAssignment = new PersonAssignment(); 
        Persons persons …
Run Code Online (Sandbox Code Playgroud)

java coding-style builder code-cleanup object-construction

26
推荐指数
2
解决办法
1万
查看次数

std :: initializer_list构造函数

在这样的代码中:

#include <iostream> 
#include <initializer_list>
#include <string>

struct A 
{
  A() { std::cout << "2" << std::endl; }
  A(int a) { std::cout << "0" << std::endl; }
  A(std::initializer_list<std::string> s) { std::cout << "3" << std::endl; }
  A(std::initializer_list<int> l) { std::cout << "1" << std::endl; } 
};

int main() 
{ 
 A a1{{}}; 
} 
Run Code Online (Sandbox Code Playgroud)

为什么调用std::initializer_list<int>构造函数的规范?如果我们定义构造函数,它会产生歧义编译错误std::initializer_list<double>.这种结构的规则是什么?为什么std::initializer_list数字作为模板参数如此具体?

c++ object-construction c++11 stdinitializerlist

12
推荐指数
2
解决办法
2030
查看次数

创建对象时 Java 速度慢吗?

在我当前的项目(OpenGL 体素引擎)中,我在生成模型时遇到了一个严重的问题。我有一个非常面向对象的结构,这意味着即使我的顶点的单个参数也是Objects。这样我Object在大约 5 秒内为 750 个体素创建了大约 75000秒。Java 在分配 new 时真的这么慢,Object还是我错过了代码中某个地方的重大失败?

java oop performance new-operator object-construction

10
推荐指数
2
解决办法
7207
查看次数

Java是否有默认的拷贝构造函数(比如在C++中)?

Java是否具有C++的默认复制构造函数?如果它有一个 - 如果我明确地声明另一个构造函数(不是复制构造函数),它是否仍然可用?

c++ java language-comparisons copy-constructor object-construction

8
推荐指数
1
解决办法
7932
查看次数

使用placement new 时,std::construct_at 通过指向volatile 的指针转换的目的是什么?

根据cppreferencestd::construct_at(T*p, Args&&... args)相当于

return ::new (const_cast<void*>(static_cast<const volatile void*>(p)))
    T(std::forward<Args>(args)...);
Run Code Online (Sandbox Code Playgroud)

演员“通过”的需要/目的是什么const volatile void*?换句话说,为什么construct_at不简单地等同于

return ::new (static_cast<void*>(p))
    T(std::forward<Args>(args)...);
Run Code Online (Sandbox Code Playgroud)

在哪种情况下,后一种代码会导致不良行为?

c++ casting volatile object-construction

8
推荐指数
1
解决办法
95
查看次数

在匿名类中测试方法时,如何使用Powermockito来模拟新对象的构造?

我想写一个JUnit测试来验证下面的代码使用BufferedInputStream:

public static final FilterFactory BZIP2_FACTORY = new FilterFactory() {
    public InputStream makeFilter(InputStream in) {        
        // a lot of other code removed for clarity 
        BufferedInputStream buffer = new BufferedInputStream(in);
        return new CBZip2InputStream(buffer);
    }
};
Run Code Online (Sandbox Code Playgroud)

(FilterFactory是一个接口.)

到目前为止我的测试看起来像这样:

@Test
public void testBZIP2_FactoryUsesBufferedInputStream() throws Throwable {
    InputStream in = mock(InputStream.class);
    BufferedInputStream buffer = mock(BufferedInputStream.class);
    CBZip2InputStream expected = mock(CBZip2InputStream.class);

    PowerMockito.spy(InputHelper.BZIP2_FACTORY);  // This line fails
    whenNew(BufferedInputStream.class).withArguments(in).thenReturn(buffer);
    whenNew(CBZip2InputStream.class).withArguments(buffer).thenReturn(expected);
    InputStream observed = InputHelper.BZIP2_FACTORY.makeFilter(in);

    assertEquals(expected, observed);
}
Run Code Online (Sandbox Code Playgroud)

对PowerMockito.spy的调用会引发此消息的异常:

org.mockito.exceptions.base.MockitoException: 
Mockito cannot mock this class: class edu.gvsu.cis.kurmasz.io.InputHelper$1
Mockito can …
Run Code Online (Sandbox Code Playgroud)

java anonymous-class mockito powermock object-construction

7
推荐指数
2
解决办法
4万
查看次数