一、初识面向对象
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<string.h> struct Person { char name[64]; int age; }; void PersonEat(struct Person *p) { printf("%s在吃饭\n", p->name); } void test01() { struct Person p1; strcpy(p1.name, "wangyong"); p1.age = 27; PersonEat(&p1); // wangyong在吃饭 } struct Dog { char name[64]; int age; }; void DogEat(struct Dog *dog) { printf("%s正在吃狗粮\n", dog->name); } void test02() { struct Dog dog; strcpy(dog.name, "旺财"); DogEat(&dog);// 旺财正在吃狗粮 struct Person p1; strcpy(p1.name, "xxx"); DogEat(&p1); // xxx正在吃狗粮 // 因为 C 中没有严格的封装, 属性和行为是分开的。 xxx这个是一个人的结构体,但是也可以如上调用了 狗 的结构体的方法,所以C的封装类型处理不够 } int main() { test01(); test02(); return 0; }
C++ 的封装有严格类型转换检测, 让属性和行为绑定在一起
1. 属性和行为作为一个整体来表示生活中的事务
2. 结构体与类中都有控制权限 public 公有权限 protected 保护权限 private 私有权限。 如果不说明, 类默认权限是 private, struct 的默认权限是 public。 所谓私有权限,就是私有成员在类内部可以访问, 类外就不可以访问#define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> #include<string> using namespace std; struct Person { char name[64]; int age; void PersonEat() // C++结构体可以放函数 { cout << name << "正在吃饭" << endl; } }; struct Dog { char name[64]; int age; void DogEat() // C++结构体可以放函数 { cout << name << "正在吃狗粮" << endl; } }; void test01() { Person p1; strcpy(p1.name, "王勇"); p1.PersonEat(); // 王勇正在吃饭 } int main() { test01(); return EXIT_SUCCESS; }
public: 类内,类外都可以访问
protected 类内可以访问, 类外不可以访问,子类可以访问
private 类内可以访问, 类外不可以访问,子类不可以访问// 设计圆类求周长 #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; const double pi = 3.14; // 1. 设计一个类,求圆的周长 class Circle { public: // 公共权限 // 半径, 成员属性 int R; // 求圆的周长 double calculateZC() { return 2 * pi * R; } // 成员函数是可以修改成员属性的 void setR(int r) { R = r; } }; void test01() { Circle c1; c1.setR(10); // c1.R = 10; cout << "c1的周长是 " << c1.calculateZC() << endl; } int main() { test01(); return EXIT_SUCCESS; }// 设计学生类 /* 设计一个学生类,属性有姓名和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号 */ #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> #include<string> using namespace std; class Student { double Height; // 默认是 private, 私有在外部不可访问 protected: // 保护权限, 类内部可以访问,(当前类的子类可以访问), 类外部不可访问 { double Weight; void setWeight() { Weight = 100.0; } } public: // 公共权限 string Name; int ID; void setName(string name) { Name = name; } void setID(int id) { ID = id; } void showInfo() { cout << "stu的姓名是 " << Name << endl; cout << "stu的序号是 " << ID << endl; } }; void test01() { Student stu; stu.setName("wangyong"); stu.setID(27); cout << "stu的姓名是 " << stu.Name << endl; cout << "stu的序号是 " << stu.ID << endl; stu.showInfo(); } int main() { test01(); return EXIT_SUCCESS; }
#define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> #include<string> using namespace std; class Person { public: // 获取姓名, 读权限 string getName() { return name; } // 设置姓名, 写权限 void setName(string n) { name = n; } // 获取年龄, 读权限 double getAge() { return age; } // 写入对象, 写权限 void setObj(string o) { obj = o; } private: string name; // 读写权限 double age = 27.0; // 读权限 string obj; // 只写 }; void test01() { Person p1; p1.setName("王勇"); p1.setObj("xxx"); cout << "姓名: " << p1.getName() << endl; cout << "年龄: " << p1.getAge() << endl; } int main() { test01(); return EXIT_SUCCESS; }