这篇文章解决以下几个问题:
1.结构体可以被类继承吗
2.结构体变量中含有字符串,可以直接赋值吗
3.C语言中的结构体使用与C++中的使用有不同的地方吗
4.如何重载操作符
代码:(vc6.0 win32 console application)
#include "stdafx.h"
#include <stdio.h>
#include <memory.h>
typedef struct _CA
{
int a;
float b;
char sc[100];
}CA,*PCA;
class CB:public CA
{
public:
CB();
CB(CA &ca);
~CB();
operator PCA( ) const;
void operator =( const CA& ca );
int d;
float e;
char scc[100];
};
CB::CB()
{
}
CB::CB(CA &ca)
{
*(PCA)this = ca;
}
CB::~CB()
{
}
CB::operator PCA( ) const
{
return (PCA)this;
}
void CB::operator =( const CA& ca )
{
//注意此处this指针不能用static_cast转化
*(PCA)this = ca;
}
void func(PCA pca)
{
printf("%s\n",pca->sc);
}
int main(int argc, char* argv[])
{
//演示_CA和CA是一样的
_CA ca1={1,2.0,"what"};
CA ca2={3,4.0,"isyourname"};
//演示含有字符串的结构体赋值
CA ca3=ca2;
printf("%s\n",ca3.sc);
//演示上一次赋值后,对下一次赋值有没有副作用
ca3=ca1;
printf("%s\n",ca3.sc);
//演示'='操作符的使用 也可以看出类可以从结构体上派生
CB cb1 = ca1;
printf("%s\n",cb1.sc);
CB cb2(ca2);
printf("%s\n",cb2.sc);
//演示重载操作符PCA,即函数中类实例如何直接转化成所需要类型的指针
func(cb2);
getchar();
return 0;
}