我正在尝试理解继承顺序在C++中的影响。我在网上看了看,但我找不到一个明确而充分的答案……
因此,为了解决这个问题,假设有两个类:B类和C类。
现在,定义:
class A1 : public B, public C{ ... };
class A2 : public C, public B{ ... };
A1和A2有什么区别?
非常感谢!
在D wiki - 上有一个关于C++接口的页面
它说,您可以链接到C++代码,但不能链接到特殊的方法,包括构造函数、析构函数和运算符重载,因为对象的生存期问题。建议要么使用包装器(并在C/C++端构造对象),要么用D重新实现构造函数。这两种方法都需要做大量工作,有时可能是不可能的。如果您想在您的D程序中使用一些C++库,这是一个很大的问题:例如,您希望使用Qt的QML,并且可以定义与extern(C++)...一起使用的所需的类,但是您仍然需要构造函数和许多包装器(比如dqml项目做的)或移植代码。
但有一种方式看起来很有效。简单的例子:
//class.h
class MyTestCla
我有一个关于C++行为的小问题。当我尝试使用派生类的构造函数初始化列表来初始化基类的数据成员时,我得到了一个错误。但是,如果我在派生类构造函数中初始化,或者如果我使用派生类成员初始化列表中的参数调用基类构造函数,则不会出现错误。所以问题是为什么我在第三种情况下会出错。
class A {
protected:
int data;
public:
A(int i = 0) : data(i) {}
};
class B : public A {
public:
B(int i = 0) { data = i; } /* works fine, initializing insi
我是C++的新手,只有很普通的C语言背景,所以如果这个问题看起来很初级,请原谅。
我目前已经得到了一些C++源代码,需要阅读和修改。
然而,在我看来,这些代码对于新手来说非常丑陋,但我不确定这些代码是否被认为是良好的C++实践。
基本上只有一个叫做存储的类,所有的信息都是公开的。
class STORAGE
{
public:
STORAGE();
virtual ~STORAGE();
//DATA
int np,nn;
int istep;
int print_step;
//...and many more variables.
//METHODS
我已经阅读了一些关于c++和c#在构造函数和析构函数中调用虚函数的不同行为的资料。我测试了下面的代码,以确认c#可以调用虚拟驱动的虚拟函数,因为它的对象存在于构造函数之前。然而,我发现结果与c++中的类似代码是一样的。谁能告诉我为什么c#不能显示"22“而只能显示"12”。
C#代码
public class Base
{
public Base() { fun(); }
public virtual void fun() { Console.WriteLine(1); }
}
public class Derived : Base
{
public D
假设有以下两个类:
struct A {
A() {}
};
struct B {
B(const A& a) {}
};
我曾多次遇到这样的情况,为了构建我需要使用的东西的实例,我必须创建一个类的临时实例。类似于:
A a;
// Do very complex computations using a;
B b(a);
// use b, a is not needed anymore.
return make_result(b);
我的问题是,有时在我的计算之后,a持有的资源可能很重要,并且在我实例化b之后,我想释放它们。同时,整个过程a -> b -&
谁能给我一个比2014-11-19的N4296更新的C++国际标准工作草案的参考吗?
或者有人能告诉我3.2.6.6条款(关于odr规则)中的例子是否正确?
我引用它:
// translation unit 1:
struct X {
X(int);
X(int, int);
};
X :: X(int = 0) { }
class D : public X { };
D d2; // X(int) called by D()
// translation unit 2:
struct X {
X(
这是我的菜鸟,因为我真的没有那么多关于C和objective c的工作。
Mat mymat(myIplImage, true);
这显然不仅将mymat声明为局部变量,而且还从myIplImage复制了内容。语法上我搞不懂的问题。如果是这样的话我会更舒服:
Mat mymat = new Mat(myIplImage, true); // in c++
你能解释一下原始声明的后台发生了什么吗?
谢谢,
我正在尝试学习C++继承,但有一件事对我来说没有任何意义。谷歌搜索的关于派生类未继承的内容的所有内容都说,构造函数、朋友和operator=都不是继承的。然而,这个信息不符合我的计划的结果。
我做了一个继承的例子,结果如下:
#include <iostream>
using namespace std;
class Base
{
public:
Base()
{
cout << "constructor base class without parameters" << endl;
}
Base(int a)
我遵循了一个关于观察者模式的教程,我遇到了以下问题。
也就是说,我有以下基类:
class Subject;
class Observer;
接下来,我想再定义两个类
class StockGrabber: public Subject {
//...
//the constructor involves a StockObserver object
StockGrabber(StockObserver so){....};
}
class StockObserver: public Observer {
//...
StockObserver(Sto
class foo {
public:
int a;
int b;
foo(int a_, int b_) : a(a_), b(b_) {}
};
int main() {
foo f;
}
当我尝试编译上面的代码片段时,我得到了如下错误消息:
foo.cc: In function 'int main()'
foo.cc:12: error: no matching function for call to 'main()::foo::foo()'
foo.cc:10: note: candidates are: main()::
我对C++很陌生,但对其他语言有一定的了解。最近我看了一些关于C++的教程,有时我看到一些类没有自己的构造函数,甚至className();也没有。这可能在其他语言中也存在,但我以前从未见过它。我想我以前也没有见过它们的使用,所以我的问题是:它们是做什么的?它们是什么?我试着用谷歌搜索这个,但我不知道它的名字..“无构造函数类”并没有给我太多的帮助。
如果没有构造函数,可以实例化它吗?或者它更像是一个静态的东西?如果我有一个包含整数的类,但没有构造函数,我可以使用int i = myClass.int;或类似的方法吗?如何访问无构造函数类?