1. c和c++中struct的区别
1.1 c语言中结构体中不能存放函数,也就是数据(属性)和行为(方法)是分离
1.2 c++中结构体中是可以存放函数的,也就是数据(属性)和行为(方法)是封装在一起的
代码实现
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string.h>
using namespace std;
//c语言中 不能放函数
struct _stu
{
int a;
int b[5];
};
//c++中 可以放函数
struct _stu1
{
int a;
int b[5];
void print_stu()
{
cout << a << endl;
}
};
struct student
{
//学生的属性和数据
int age;
int id;
char name[256];
//操作属性的叫做 方法或行为-函数
void print()
{
cout << age << id << name << endl;
}
};
void test01()
{
student obj;
obj.age = 10;
obj.id = 20;
strcpy(obj.name,"lucy");
obj.print();
}
int main()
{
test01();
return 0;
}
2. C语言对事物的封装
c语言中表示事物时,将属性和行为分离,有可能行为调用出错
代码实现
#include <stdio.h>
//表示人
struct Person
{
int age;
char name[128];
};
void Person_eat(struct Person *p)
{
printf("%s 在吃饭\n",p->name);
}
//表示dog
struct Dog
{
int age;
char name[128];
};
void Dog_eat(struct Dog *p)
{
printf("%s 在吃粑粑\n", p->name);
}
void test01()
{
struct Person p1;
p1.age = 20;
strcpy(p1.name,"bob");
Person_eat(&p1);
struct Dog d1;
d1.age = 7;
strcpy(d1.name,"旺财");
Dog_eat(&d1);
Dog_eat(&p1);//人 调用了狗的行为
}
int main()
{
test01();
return 0;
}
3. c++对事物的封装
3.1 c++将事物的属性和行为封装在一起
3.2 类和结构体的一个区别在于:类对成员可以进行访问的权限控制,结构体不可以。
3.3 类 = 类型 (事物的行为和属性) 类实例化出来的变量叫对象
3.4 类中的函数可以访问类里面的成员
代码实现
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string.h>
using namespace std;
//c++中对事物的封装 将属性和行为封装在一起
//类 将事物抽象成属性和行为,并且封装在一起
//结构体中所有成员默认都是公有的 类中的所有成员默认是私有的,也可以修改成员的访问权限
// struct Person
class Person
{
public://公有的
//类中的所有成员 访问的权限都是私有的 private
//属性
int age;
char name[128];
//行为
void Person_eat()
{
printf("%s 吃饭\n",name);
}
};
struct Dog
{
//属性
int age;
char name[128];
//行为
void Dog_eat()
{
printf("%s 吃粑粑\n", name);
}
};
void test01()
{
//通过类 实例化出一个变量 这个变量叫对象
Person p1;
p1.age = 10;
strcpy(p1.name, "lucy");
p1.Person_eat();
Dog d1;
d1.age == 6;
strcpy(d1.name,"旺财");
d1.Dog_eat();
}
int main()
{
test01();
}
3. 类中成员权限
访问属性 | 属性 | 对象内部 | 对象外部 |
public | 公有 | 可访问 | 可访问 |
protected | 保护 | 可访问 | 不可访问 |
private | 私有 | 可访问 | 不可访问 |
代码实现
class person
{
public: //公有的 类内类外都可访问
int mTall;
protected: //保护的 类外不可访问,类内可以访问,子类可以访问
int mMoney;
private: //私有的 类外不可访问,类内可以访问,子类不可访问
int mAge;
void show() const
{
cout << mTall << " " << endl;
cout << mMoney << " " << endl;
cout << mAge << " " << endl;
}
};
void test01()
{
person p{};
p.mTall = 100;
cout << p.mTall << " " << endl;
}
4. 设置成员变量为私有权限
优点:
4.1 对变量的设置时的控制
4.2 可以给变量设置只读权限
4.3 可以给变量设置只写权限
4.4 可以给变量设置可读可写权限
代码实现
class AccessLevels
{
public:
//对只读属性进行只读访问
int getReadOnly()
{
return readOnly;
}
//对读写属性进行读写访问
void setReadWrite(int val)
{
readWrite = val;
}
int getReadWrite()
{
return readWrite;
}
//对只写属性进行只写访问
void setWriteOnly(int val)
{
writeOnly = val;
}
private:
int readOnly; //对外只读访问
int noAccess; //外部不可访问
int readWrite; //读写访问
int writeOnly; //只写访问
};