我有以下代码:
class Pet {
public:
virtual string speak() const { return ""; }
};
class Dog : public Pet {
public:
string speak() const { return "Bark!"; }
};
int main() {
Dog ralph;
Pet* p1 = &ralph;
Pet& p2 = ralph;
Pet p3;
// Late binding for both:
cout << "p1->speak() = " << p1->speak() <<endl;
cout << "p2.speak() = " << p2.speak() << endl;
// Early binding (probably):
cout << "p3.speak() = " << p3.speak() << endl;
} …Run Code Online (Sandbox Code Playgroud) 我正在学习C++中的内联函数,并且已经涉及到有关其使用限制的部分.它说:
如果隐式或显式地采用函数的地址,编译器也不能执行内联.
有人可以向我解释,也许是某种例子,究竟是什么意思?
我已经进入了关于参考文献的c ++研究阶段.它声明了以下规则:
将引用初始化为对象后,无法将其更改为引用另一个对象.
Iv写了一个简短的代码(正如练习中所要求的那样),旨在证明这个规则是正确的.
int y = 7;
int z = 8;
int&r = y;
r = z;
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么这个代码编译没有任何错误或警告?
我目前正在讨论有关C++中运算符重载的问题.我有个问题:
创建一个包含int的简单类,并将operator +作为成员函数重载.还提供了一个print()成员函数,它将一个ostream作为参数并打印到该ostream&.测试你的课程,以证明它正常工作.
我可以创建类并编写操作符+函数,但我真的不明白问题的第二部分.到目前为止,在我对c ++的研究中,我并没有真正遇到过ostream,因此我不确定是否有可能明确地创建这样的流.我尝试过使用:
std :: ostream o;
但是这会产生错误.有人可以请教我如何创建这个功能吗?
我正在使用C++进行练习但是我得到意想不到的输出我希望有人可以解释.练习要求我创建一个名为rock的类,它有一个默认构造函数,一个复制构造函数和一个析构函数,所有这些都会向cout宣布自己.
在main方法中,我尝试通过值将此类的成员添加到向量:
vector<Rock> byValue;
Rock r1, r2, r3;
byValue.push_back(r1);
byValue.push_back(r2);
byValue.push_back(r3);
cout << "byValue populated\n\n";
Run Code Online (Sandbox Code Playgroud)
我预期的输出(并在练习题中显示)是:
Rock()
Rock()
Rock()
Rock(const Rock&)
Rock(const Rock&)
Rock(const Rock&)
byValue populated
~Rock()
~Rock()
~Rock()
~Rock()
~Rock()
~Rock()
Run Code Online (Sandbox Code Playgroud)
但是我得到的输出是:
Rock()
Rock()
Rock()
Rock(const Rock&)
Rock(const Rock&)
Rock(const Rock&)
~Rock()
Rock(const Rock&)
Rock(const Rock&)
Rock(const Rock&)
~Rock()
~Rock()
byValue populated
~Rock()
~Rock()
~Rock()
~Rock()
~Rock()
~Rock()
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么似乎有额外的复制构造函数和析构函数调用?
我正在进行一项练习,要求我拿一个基类Rodent并使它成为一个纯粹的抽象类.我对纯抽象类的理解是它充当接口并且只包含纯虚函数.虽然这是一个简单的练习,但我对本书提供的解决方案有疑问:
class Rodent
{
public:
virtual ~Rodent() {cout << "Destroy rodent" << endl;}
virtual void run() = 0;
virtual void squeak() = 0;
};
Run Code Online (Sandbox Code Playgroud)
如您所见,作者为析构函数添加了一个虚拟定义.添加这个定义是否意味着这不是一个抽象类而不是一个"纯粹的"抽象类?