C++面向对象的三大特性为 :封装、继承、多态。C++认为万事万物皆为对象,对象上有其属性和行为。例如人可以看作一个对象,属性有姓名、年龄、性别、身高、体重等。具有相同性质的对象,我们可以抽象称为类,人属于人类,车属于车类。
属性和行为
封装 :封装是C++面向对象的三大特性之一。 封装的意义 :将属性和行为作为一个整体 ,表现生活中的事物。将属性和行为加以权限控制。
案例设计
案例1
建立一个圆类,并求圆的周长。
#include<iostream>
using namespace std;
const double PI = 3.14;
class circle {
public:
int r;
double calculate() {
return 2 * PI * r;
}
};
int main() {
circle c1;
c1.r = 10;
cout << "圆c1的周长为:" << c1.calculate() << endl;
system("pause");
return 0;
}
案例2
设计一个学生类,属性有姓名和学号。可以给姓名和学号赋值,可以显示学生的姓名和学号。
#include <iostream>
#include<string>
using namespace std;
class Student {
public:
string sname;
int sid;
void show() {
cout << "学生的姓名为" << sname << endl;
cout << "学生的学号为" << sid << endl;
}
void setName(string name) {
sname = name;
}
void setId(int id) {
sid = id;
}
};
int main() {
Student s1;
Student s2;
s1.setName("张三");
s1.setId(1);
s1.show();
s2.sid = 2;
s2.sname = "李四";
s2.show();
system("pause");
return 0;
}
访问权限
类在设计时,可以把属性和行为放在不同权限下加以控制。访问权限有三种,public,private,protected。
#include<iostream>
using namespace std;
class Person {
public:
string p_name;
protected:
string p_car;
private:
int p_password;
public:
void func() {
p_name = "张三";
p_car = "宝马";
p_password = 123456;
}
};
int main() {
Person p1;
p1.p_name = "李四";
system("pause");
return 0;
}
class和struct区别
C++中class和struct的唯一区别在于默认的访问权限不同。struct默认权限为公共,class默认权限为私有。
#include<iostream>
using namespace std;
class C1 {
int number;
};
struct C2 {
int number;
};
int main() {
C1 c1;
C2 c2;
c2.number = 10;
system("pause");
return 0;
}
成员属性置为私有的优点
优点:可以自己控制读写权限。对于写权限,可以检测数据的有效性。
#include<iostream>
#include<string>
using namespace std;
class Person {
public:
void setname(string name) {
p_name = name;
}
string getname() {
return p_name;
}
void setage(int age) {
if (age < 0 || age>150) {
cout << "请输入正确年龄,否则默认设定年龄为0" << endl;
p_age = 0;
return;
}
p_age = age;
}
int getage(){
return p_age;
}
void setlover(string lover) {
p_lover = lover;
}
private:
string p_name;
int p_age;
string p_lover;
};
int main() {
Person p1;
p1.setname("张三");
cout << "姓名:" << p1.getname() << endl;
p1.setage(18);
cout << "年龄:" << p1.getage() << endl;
p1.setlover("美女");
system("pause");
return 0;
}
|