64,654
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#define interface class
using namespace std;
interface A{
public:
virtual void fun_a()=0;
};
interface B{
public:
virtual void fun_b()=0;
};
class C:public A,public B{
public:
void fun_a(){cout<<"function a"<<endl;}
void fun_b(){cout<<"function b"<<endl;}
~C(){cout<<"destructor"<<endl;}
};
int main(int argc,char **argv){
A *a=new C();
a->fun_a();
delete a;
return 0;
}
#include <iostream>
#define interface class
using namespace std;
interface A{
public:
virtual void fun_a()=0;
};
interface B{
public:
virtual void fun_b()=0;
};
class C:public A,public B{
public:
void fun_a(){cout<<"function a"<<endl;}
void fun_b(){cout<<"function b"<<endl;}
~C(){cout<<"destructor"<<endl;}
};
int main(int argc,char **argv){
B *b=new C();
b->fun_b();
delete b;
return 0;
}
cout << (A *)b <<endl;
cout << (B *)b << endl;
cout << (C *)b << endl;
A *a=new C();
// 1 new C() 返回一个 C * 类型指针,假定为 C *tmp
// 2 = 之后,进行了隐式指针类型转换,*a = (A *)((char *)tmp + delta(A))
// 这里的 delta(A) = 0, a == tmp
B *b=new C();
// 1 new C() 返回一个 C * 类型指针,假定为 C *tmp
// 2 = 之后,进行了隐式指针类型转换,*b = (B *)((char *)tmp + delta(B))
// 这里的 delta(B) != 0, b != tmp
#include <iostream>
#define interface class
using namespace std;
interface A{
public:
virtual void fun_a()=0;
virtual ~A(){}
};
interface B{
public:
virtual void fun_b()=0;
virtual ~B(){}
};
class C:public A,public B{
public:
void fun_a(){cout<<"function a"<<endl;}
void fun_b(){cout<<"function b"<<endl;}
~C(){cout<<"destructor"<<endl;}
};
int main(){
B *b=new C();
b->fun_b();
delete b;
return 0;
}