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"); }