我偏向于使用我的构造函数的成员初始化列表......但我早就忘记了这背后的原因......
您是否在构造函数中使用成员初始化列表?如果是这样,为什么?如果没有,为什么不呢?
我有一个类有几个对象作为成员变量.我不希望在声明时调用这些成员的构造函数,所以我试图明确地挂起指向该对象的指针.我不知道我在做什么.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) 假设一个类被定义为
class A {
//.....
};
Run Code Online (Sandbox Code Playgroud)
现在我正在创建两个对象
A a,b;
Run Code Online (Sandbox Code Playgroud)
按照什么顺序a和b创造的呢?它是由标准定义的吗?
请帮助我理解以下代码的工作原理:
<script>
var re = RegExp('\\ba\\b') ;
alert(re.test('a')) ;
alert(re.test('ab')) ;
</script>
Run Code Online (Sandbox Code Playgroud)
在第一行没有new运营商.
据我所知,JavaScript中的一个构造函数是一个初始化运算符创建的对象的函数,new它们并不意味着返回任何东西.
在我的应用程序中,我必须实例化许多不同类型的对象.每种类型都包含一些字段,需要添加到包含类型中.我怎样才能以优雅的方式做到这一点?
我当前的初始化步骤看起来像这样:
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) 在这样的代码中:
#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数字作为模板参数如此具体?
在我当前的项目(OpenGL 体素引擎)中,我在生成模型时遇到了一个严重的问题。我有一个非常面向对象的结构,这意味着即使我的顶点的单个参数也是Objects。这样我Object在大约 5 秒内为 750 个体素创建了大约 75000秒。Java 在分配 new 时真的这么慢,Object还是我错过了代码中某个地方的重大失败?
Java是否具有C++的默认复制构造函数?如果它有一个 - 如果我明确地声明另一个构造函数(不是复制构造函数),它是否仍然可用?
c++ java language-comparisons copy-constructor object-construction
根据cppreference,std::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)
在哪种情况下,后一种代码会导致不良行为?
我想写一个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) c++ ×6
java ×4
constructor ×2
new-operator ×2
oop ×2
builder ×1
c++11 ×1
casting ×1
code-cleanup ×1
coding-style ×1
declaration ×1
javascript ×1
mockito ×1
performance ×1
powermock ×1
volatile ×1