C++核心编程之类和对象一
文章目录
- C++核心编程之类和对象一
- 1.类
- 1.类的组成
- 2.类的访问权限
- 3.class和struct的区别
1.类
1.类的组成
一个类通常由属性(也叫成员属性)和行为(成员函数、成员方法)组成,类有不同的访问权限(公共、保护和私有),假设现在有一个学生类Student
:
//
// Created by 86189 on 2024/6/1.
//
#include "iostream"
using namespace std;class Student{
public:string name;int grade{};void printMessage() const{cout<<"姓名:"<<name<<" 年级:"<<grade<<endl;}
};int main(){Student stu;stu.name="张三";stu.grade=21107123;stu.printMessage();return 0;
}
Student stu
称为创建一个对象。
2.类的访问权限
公共权限:即类内可以访问,类外也可访问。
保护权限:即类内可以访问,类外不可访问。
私有权限:即类内可以访问,类外不可访问。
#include "iostream"
using namespace std;class Student{
public:int sex;
protected:int age;
private:int height;
};int main(){Student s{};s.sex = 1;
// s.age = 18;
// s.height = 180;return 0;
}
类内:class
内。
从上边示例可以看到,在类外无法访问保护和私有权限的成员属性。但在类内可以访问:
#include "iostream"
using namespace std;class Student{
public:int sex;
protected:int age;
private:int height;void print(){cout << sex << endl;cout << age << endl;}
};int main(){Student s{};s.sex = 1;
// s.age = 18;
// s.height = 180;
// s.print();return 0;
}
在实际应用中,通常设置私有的成员属性,再通过共有的成员函数进行操作,实现数据的可读可写,只读等等操作,同时也可以实现数据的效验。
//
// Created by 86189 on 2024/6/2.
//
#include "iostream"
using namespace std;class Person{
private:string name; // 姓名,私有成员,不在类的外部直接访问int age = 18; // 年龄,初始化为18int weight{}; // 体重,初始化为空值int height{}; // 身高,初始化为空值int id{}; // ID,初始化为空值public:// 获取ID值// 如果ID小于0,则设置为0;如果大于10亿,则设置为10亿// 这样做是为了确保ID的合理性和范围限制int getId(){if(id < 0){id = 0;}if (id > 1000000000){id = 1000000000;}return id;}// 设置ID值// 参数p_id: 新的ID值void setId(int p_id){id = p_id;}// 设置年龄// 参数P_age: 新的年龄值// 返回值: 设置后的年龄// 如果年龄小于0,则设置为0;如果大于150,则设置为150// 这样做是为了确保年龄的合理性和范围限制int setAge(int P_age){if(age < 0){age = 0;}if (age > 150){age = 150;}age = P_age;return age;}
};int main(){Person p; // 创建Person对象p.setId(1); // 设置对象的ID为1cout << p.getId() << endl; // 输出ID值cout << p.setAge(15) << endl; // 设置年龄为15并输出return 0;
}
3.class和struct的区别
在C++中,class
和struct
都可以用来定义一种新的数据类型,但它们在默认情况下和在某些其他细节上有一些重要的区别。以下是它们之间的主要区别:
-
默认访问权限:
struct
中的成员默认是public
的,即可以从任何地方访问。class
中的成员默认是private
的,即只能在类的内部被访问,除非在定义时特别声明为public
或protected
。
-
用途:
- 尽管
struct
和class
在C++中可以用于定义几乎相同的数据结构,但传统上,struct
更多地被用作数据的集合(即数据结构),而class
则用于定义具有某些操作的对象(即封装数据和方法的对象)。
- 尽管
-
继承:
- 两者都可以用于实现继承,但由于
class
的默认访问权限是private
,因此当使用class
进行继承时,派生类无法直接访问基类的私有成员。而struct
由于默认访问权限是public
,因此派生类可以直接访问基类的公有成员。
- 两者都可以用于实现继承,但由于
-
C和C++中的差异:
- 在C语言中,
struct
是唯一的用户定义数据类型,并且它只能包含数据成员(即变量)。 - 在C++中,
struct
和class
都可以包含数据成员和成员函数(即方法)。但如上所述,它们之间的默认访问权限不同。
- 在C语言中,
-
其他C++特性:
- 在C++中,你还可以为
struct
和class
添加其他特性,如模板、构造函数、析构函数、操作符重载、继承、友元等。这些特性在struct
和class
之间没有区别。
- 在C++中,你还可以为
-
语法糖:
- 从语法的角度来看,
class
和struct
是C++的“语法糖”。也就是说,除了默认访问权限不同外,它们在语法上几乎是相同的。
- 从语法的角度来看,
-
命名约定:
- 虽然这不是语言规则,但在某些编程环境中,程序员可能会根据命名约定来使用
class
和struct
。例如,你可能会看到struct
更多地用于定义简单的数据结构,如点(包含x和y坐标)或矩形(包含宽度和高度),而class
则用于定义更复杂的对象,如汽车或人。
- 虽然这不是语言规则,但在某些编程环境中,程序员可能会根据命名约定来使用
class
和struct
在C++中的主要区别在于它们的默认访问权限和可能的命名约定。但在功能上,它们几乎是一样的。