假设我定义了一些类:
class Pixel {
public:
Pixel(){ x=0; y=0;};
int x;
int y;
}
Run Code Online (Sandbox Code Playgroud)
然后使用它编写一些代码.我为什么要这样做?
Pixel p;
p.x = 2;
p.y = 5;
Run Code Online (Sandbox Code Playgroud)
来自Java世界我总是写:
Pixel* p = new Pixel();
p->x = 2;
p->y = 5;
Run Code Online (Sandbox Code Playgroud)
他们基本上做同样的事情,对吗?一个在堆栈上而另一个在堆上,所以我将在以后删除它.两者之间有什么根本区别吗?为什么我更喜欢一个呢?
我是C++的新手,我正在努力理解构建类的良好实践.
假设我有一节课Foo
:
class Foo {
public:
double foo;
Foo(double foo);
Foo add(Foo f);
}
Run Code Online (Sandbox Code Playgroud)
我想创建一个Bar
由两个Foo
对象组成的类,并在构造时创建第三个对象.
第一个选项:作为类成员的对象
class Bar {
public:
Foo foo1;
Foo foo2;
Foo foo3;
Bar(const Foo &f1, const Foo &f2);
}
Bar::Bar(const Foo &f1, const Foo &f2):
{
foo1 = f1;
foo2 = f2;
foo3 = f1.add(f2);
}
Run Code Online (Sandbox Code Playgroud)
因为我没有为其定义默认构造函数,所以它不起作用
Foo
.
第二种选择:指针作为班级成员
class Bar {
public:
const Foo* foo1;
const Foo* foo2;
const Foo* foo3;
Bar(const Foo &f1, const Foo &f2);
} …
Run Code Online (Sandbox Code Playgroud)