C中的结构体存在缺点:1.main函数中的任意赋值语句都可以访问结构体中的成员,但在现实生活中并不是什么数据都可以被随意访问的,因此C语言中的结构体的数据是不安全的;2.结构体中的数据和对该数据的操作是分离的,并不是一个被封装起来的整体,因此使程序难以重用,影响了软件生产效率;于是C++中引入了类的概念。
C++中类的一般格式为:
class Kid
{
private:
int age; //私有成员
char *name;
char *sex;
public: //公有成员
void setKid(int age,char *name,char *sex);
void showKid();
};
C++中规定如果没有对类的成员加私有private,保护protected,或公有public,则默认为私有的。而对于C++的结构体来说,成员可以是私有的,保护的或公有的,但默认为公有的;还有要注意的是不能在类的声明中给数据成员赋值,比如:
class Kid
{
private :
int age=10;
char *name="rookie_j";
char *sex="男";
};
一般情况下,一个类的数据成员应该声明为私有的,成员函数声明为共有的。这样,内部的数据隐藏在类中,在类的外部无法访问直接访问,使数据得到有效的保护。而公有的成员函数就成为一种与类外部沟通的接口。
利用C++对象模拟游戏商城的数据(代码如下):
#include <iostream>
using namespace std;
int i,j;
class ltem{
public:
int wpjg;
char sfgm[20];
private:
};
class list{
public:
void abc(ltem a);
void abc1(ltem a);
void abc2(ltem a);
void abc3(ltem a);
char a1[20];
private:
};
void list::abc(ltem a){
a.wpjg=2000;
sprintf(a.sfgm,"是否购买:\n1.是 2.否\n");
cout<<a.wpjg<<"\n"<<endl;
cout<<a.sfgm<<"\n"<<endl;
scanf("%d",&i);
if(i==1){
cout<<"购买成功\n"<<endl;
}
else{
cout<<"欢迎下次再来\n"<<endl;
}
}
void list::abc1(ltem a){
a.wpjg=12888;
sprintf(a.sfgm,"是否购买:\n1.是 2.否\n");
cout<<a.wpjg<<"\n"<<endl;
cout<<a.sfgm<<"\n"<<endl;
scanf("%d",&i);
if(i==1){
cout<<"购买成功\n"<<endl;
}
else{
cout<<"欢迎下次再来\n"<<endl;
}
}
void list::abc2(ltem a){
a.wpjg=12888;
sprintf(a.sfgm,"是否购买:\n1.是 2.否\n");
cout<<a.wpjg<<"\n"<<endl;
cout<<a.sfgm<<"\n"<<endl;
scanf("%d",&i);
if(i==1){
cout<<"购买成功\n"<<endl;
}
else{
cout<<"欢迎下次再来\n"<<endl;
}
}
void main(){
list n1,n2,n3,n4,n5,n6,n7,n8,n9;
ltem i1,i2,i3,i4,i5,i6,i7,i8,i9;
sprintf(n1.a1,"1.求婚戒指\n");
sprintf(n2.a1,"2.凌霜锦袍\n");
sprintf(n3.a1,"3.傲雪锦衣\n");
cout<<n1.a1<<"\n"<<endl;
cout<<n2.a1<<"\n"<<endl;
cout<<n3.a1<<"\n"<<endl;
printf("输入你想要购买的编号");
scanf("%d",&j);
switch(j){
case 1:
n1.abc(i1);
break;
case 2:
n2.abc1(i2);
break;
case 3:
n3.abc2(i3);
break;
default:
printf("输入有误");
break;
}
system("pause");
}