在描述Object
中,我看到该方法ToString()
返回string?
。问题出现了,为什么?毕竟string
,它是一个引用类型,并且本身可以有一个值null
。有什么区别,还是添加这个包装器只是为了强调该方法可以返回null
什么?
Andrey Golubev's questions
有一个模板容器类,我想让它支持它std::unique_ptr
作为内容,但是一些方法的实现需要改变(make move而不是copy),那么,是否有可能以某种方式为每个人专门化这些方法std::unique_ptr
?
试图这样做template<class T> void Container<std::unique_ptr<T> >::linearise()
- 编译器发誓。
我不明白以下信息与该问题有何关系,但应评论员的要求添加。
这就是我与接受 T 的人合作的方式:
void push_back(T const & elem) {
if (m_size == m_capacity)
throw std::overflow_error("Pushing to full container");
m_body[realPlace(m_size)] = elem;
++m_size;
}
void push_back(T && elem) {
if (m_size == m_capacity)
throw std::overflow_error("Pushing to full container");
m_body[realPlace(m_size)] = std::move(elem);
++m_size;
}
下面是一个不带参数但需要内容信息的方法示例:
T* linearize() {
if (is_linear())
return m_body;
byte *oldMemPool = m_memPool;
T *oldBody = m_body;
alloc_body(m_capacity);
for (size_t i = 0; i < m_size; ++i)
m_body[i] = oldBody[realPlace(i)];
m_begin = 0;
delete[] oldMemPool;
return m_body;
}
我想编写一个比较 2 个 8 位总线的模块,但我不想编写每个位的手动比较。
如何做一个循环?
在 Go 中是否可以将指向对象的指针传递给函数,但仍然阻止函数修改它?
另外,是否可以防止方法更改结构的字段?
优点是在
bool is_negative(int const & ptr) {
return (ptr < 0) ? true : false;
}
和
int SomeClass::get_value() const {...}
分别。
(很明显,在示例 1 中这是没有意义的,但是代替int
'a 可能会有一些您不想复制其对象的大型类。)
如何使用 为数组分配内存shared_ptr
?
我试图做这样的事情,但它在执行时崩溃。
#include <iostream>
#include <memory>
using namespace std;
template<class T> using sPtr = shared_ptr<T>;
int main() {
unsigned int size = 10;
sPtr<int[]> array = make_shared<int[]>(size);
for (unsigned int i = 0; i < size; ++i)
array[i] = i;
for (unsigned int i = 0; i < size; ++i)
cout << array[i] << " ";
return 0;
}
如何在子类拷贝构造函数中使用父类拷贝构造函数?
class A {
int a;
public:
A(const A & other) {
a = other.a;
}
};
class B : public A {
int b;
public:
B(const B & other) : A(/*what*/) {
b = other.b;
}
};
我看到了使用附加文件制作标签的建议,但它有 10 mb 的限制,而我的构建需要 300 mb。
开始学习 Eric 和 Elizabeth Freeman 的《设计模式》一书。我正在尝试从 C++ 的第一章编写架构。
如何在 Duck (RedheadDuck) 后继者的构造函数中将 FlyWithWings 分配给 FlyBehaviour 指针?FlyWithWings 有一个静态函数,我不想在 main() 的某个地方创建一个实例,然后将它传递给构造函数,是否有可能以某种方式避免这种情况?
编码:
class FlyBehaviour {
public:
static virtual void fly() = 0;
};
class FlyWithWings : public FlyBehaviour {
public:
static void fly() {
cout << "I'm flying with wings!" << endl;
}
};
class Duck {
private:
FlyBehaviour *flyBehaviour;
public:
virtual void display() = 0;
void fly() {flyBehaviour->fly();}
};
class RedheadDuck : public Duck {
RedheadDuck() {
// Как присвоить flyBehaviour указатель на FlyWithWings?
}
void display() {
cout << "I'm redhead duck." << endl;
}
};
谢谢大家,我这样做了:
class FlyBehaviour {
public:
virtual void fly() = 0;
};
class FlyWithWings : public FlyBehaviour {
public:
void fly() {
cout << "I'm flying with wings!" << endl;
}
};
class Duck {
protected:
FlyBehaviour *flyBehaviour;
public:
Duck() {flyBehaviour = nullptr;}
virtual void display() = 0;
void fly() {flyBehaviour->fly();}
~Duck() {delete flyBehaviour;}
};
class RedheadDuck : public Duck {
public:
RedheadDuck() {
Duck::flyBehaviour = new FlyWithWings;
}
void display() {
cout << "I'm redhead duck." << endl;
}
};
如何用不适合的数字进行计算long long int
?您可以将数字拆分为 2 个变量,其中一个存储第一个订单,第二个存储其余订单,但是有没有更简单的方法?