我的一个朋友问我"如何在C++中实现运行时多态性?" 我回答"通过继承"
他说:"不,只能使用虚拟功能才能实现".
所以我给了他一个以下代码的例子: -
#include<iostream>
using namespace std;
class A
{
public:
int i;
A(){i=100;}
};
class B : public A
{
public:
int j;
B(){i = -1; j = 99;}
};
void func(A& myA)
{
cout<<myA.i << endl;
}
int main()
{
B b;
A* a = new B();
func(*a);
func(b);
delete a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这里,函数func()接受A的引用,但是我们传递B的对象,我们可以打印公共成员"i"的值.他说这是编译时多态.
我的问题是: -
1)运行时多态性是否仅通过虚函数实现?
2)上面的例子是运行时多态还是编译时间?
3)如果我有以下代码: -
void func2(A& myA)
{
cout << myA.i << endl;
// dynamic/static cast myA to myB …Run Code Online (Sandbox Code Playgroud) 我怀疑我的概念在字符串池中是否清晰.请研究以下一组代码,并检查我的答案在以下一组陈述后创建的对象数量是否正确: -
1)
String s1 = "abc";
String s2 = "def";
s2 + "xyz";
Run Code Online (Sandbox Code Playgroud)
2)
String s1 = "abc";
String s2 = "def";
s2 = s2 + "xyz";
Run Code Online (Sandbox Code Playgroud)
3)
String s1 = "abc";
String s2 = "def";
String s3 = s2 + "xyz";
Run Code Online (Sandbox Code Playgroud)
4)
String s1 = "abc";
String s2 = "def";
s2 + "xyz";
String s3 = "defxyz";
Run Code Online (Sandbox Code Playgroud)
根据我所知的概念,在上面的4个案例中,在执行每组行之后将创建4个对象.