关于C++编程的问题。在C++中调用方法
可以使用C++做这样的事情:
Lecture le;
Carriage ca = le;
没有铸造,只是写这样。问题是,当我试图调用属于Lecture类的方法时,方法以红色下划线。
ca.runIt();
我不太清楚,如果我了解我的任务规范,但给出了这段代码。最好的问候
关于C++编程的问题。在C++中调用方法
可以使用C++做这样的事情:
Lecture le;
Carriage ca = le;
没有铸造,只是写这样。问题是,当我试图调用属于Lecture类的方法时,方法以红色下划线。
ca.runIt();
我不太清楚,如果我了解我的任务规范,但给出了这段代码。最好的问候
你可以在C++做这样的事情:
是。
struct Lecture {
};
struct Carriage {
Carriage(const Lecture&) {
}
void runIt() {
}
};
int main() {
Lecture le;
Carriage ca = le;
ca.runIt();
}
的问题是,当我试图调用属于讲座类红色下划线的方法的方法。
当然。 ca
不是Lecture
。 ca
是Carriage
。您只能在ca
上调用Carriage
方法。
让我们把它从一般情况分解到最具体的情况。
如果你有一些任意A
类和一些其他的任意类B
,语句:
A a;
B b = a;
是一般行不通的。它会肯定不能自行工作;你必须付出努力使其工作。
所以,现在让我们来具体说明一下。如果B
是从A
派生的类,那么它将也不起作用。如果A
来自B
,那么仍然不起作用。
为什么?因为A a
定义了一个对象,而不是一个引用。它创造了一个价值。 B b = a;
是试图将值a
存储到新值b
。你不能这样做。
如果A
从B
导出(B
是基类),你可以做此:
A a;
B &b = a;
这是合法的C++,它的意义了。 b
现在是指部分的a
。具体而言,是基类的a
的部分。
请注意,反转不起作用。如果A
是基类,C++会引发错误。
现在,有一种方法可以使通用语句有效。
A a;
B b = a;
如果你希望这一个特定类B
是合理的,那么B
必须定义如下:
class B ... //Whatever base classes you want.
{
public:
B(const A &a);
};
,需要一个const A &
构造函数是一个转换构造函数。它的任务是使用来自a
对象的数据创建B
对象。由于这种转换的构造函数被宣布不的关键字explicit
,那么它可以用于像B b = a;
隐式转换。如果它被宣布与的explicit
关键字,你必须明确地将其转换:B b = B(a);
。
对类有一个转换构造函数意味着A
的任何实例都可以转换为B
。所以,你可以通过A
给带有B
功能(无论是通过值或const&
。不是引用),而不必做一个明确的转换。
请注意,构建对象的转换确实是而不是允许您在对象B
上调用A
的函数。您只能调用B
的函数,其中B
定义或由B
的基类之一定义。
非常感谢你的答复。我刚刚发现源文件的内容有错误。应该有一个讲座班,而不是Carriage。顺便说一下,这个程序中没有使用继承。 – ucas
这个问题令人难以置信的含糊。首先,“Lecture”和“Carriage”类型的定义是什么? – ildjarn
你可以“做这样的事情”吗?是。它做你认为它做的事吗?可能不会。 –
你能否更详细地描述“我的任务规范”?也许你的问题有些方面我们并不了解。 –