类和对象
对象
什么是对象
面向对象编程(Object Oriented Programming)是一种编程风格,旨在让思维编程更接近思考现实世界。
在编程世界里,对象是独立单元,每一个都有自己的身份,像真实世界那样,像苹果,马克杯等等,每一个都有独一无二的 identity (身份)。
有两个一模一样的水杯,但是他们仍然是分开的两个独立个体。
对象用属性来描述它们的特征。例如,一辆车可以是红色或蓝色,一个杯子可以是满的或空的,等等。
一个属性描述了一个对象的当前状态。
对象可以有多个属性(马克杯可以是空的,红色的和大的)。
对象的状态与其类型无关;比如:一个杯可能充满水,另一个杯可能是空的。
如何区分对象
在现实世界中,每个对象都以自己的方式行事。汽车是移动,电话是铃响,等等。这同样适用于对象。
所以对象的类型有三个维度表示,identity(标识),attributes(属性),behavior(行为)
在编程中,一个对象是独立的,有自己的身份(标识)。它与其他对象是分开的。
每个对象都有自己的属性,描述了它的当前状态。每个对象都展示自己的行为,这表明他们可以做什么。
在编程中,对象并不总是代表物理项目。
例如,一个编程对象可以代表日期,时间,银行账户。银行账户不是有形的;你看不见它或者触摸它,但它仍然是一个明确的对象 - 它有自己的身份,属性和行为。
什么是类
对象是使用类来创建的,而这些类实际上是 OOP(面向对象编程) 的焦点。
这个类描述了这个对象是什么,但是和对象本身是分开的。
换句话说,一个类可以被描述为一个对象的蓝图,描述或定义。
您可以使用相同的类作为创建多个不同对象的蓝图。
例如,为了创建新的建筑,建筑师创建了一个蓝图,作为实际建筑结构的基础。同样的蓝图可以用来创建多个建筑物。
编程以相同的方式工作。我们首先定义一个类,它成为创建对象的蓝图。
每个类都有一个名称,并描述了属性和行为。
在编程中,type 类型用于引用类名:我们正在创建一个特定类型的对象。
属性也被称为属性或数据。
方法
方法是类 行为 的另一个术语。一个方法基本上是一个属于一个类的函数。
方法类似于函数 - 它们是被调用的代码块,也可以执行操作并返回值。
一个类的例子
例如,如果我们正在创建一个银行项目,我们可以给我们的类以下特征:
名称:BankAccount
属性:accountNumber,余额: dateOpened
行为:open(), close(), deposit()
该类指定每个对象应具有已定义的属性和行为。但是,它没有指定实际的数据是什么;它只提供一个定义。
一旦我们编写了这个类,我们就可以继续创建基于这个类的对象。
每个对象被称为一个类的实例。创建对象的过程称为实例化。
每个对象都有自己的身份(标识),数据(属性)和行为。
访问修饰符
访问说明符用于为特定成员设置访问级别。
访问说明符的三个级别是 public, protected, 和 private.
一个 public 成员可以从类以外的任何地方访问,也可以在类对象的范围内的任何地方访问。
class 类名{
private:
私有数据成员和成员函数
//一般只有本类的成员函数及友元函数访问,不能被类以外或者其他类访问
protected:
受保护的数据成员和成员函数
//这些成员智能被本类函数、派生类(子类)函数、和友元函数访问
public:
共有数据成员和成员函数
//可以被本程序任何函数访问
};
访问修饰符只需要声明一次; 多个成员可以遵循单个访问修饰符。注意 public 关键字后面的冒号
把访问说明符放在一起:
#include <iostream>
#include <string>
using namespace std;
class myClass {
public:
void setName(string x) {
name = x;
}
string getName() {
return name;
}
private:
string name;
};
int main() {
myClass myObj;
myObj.setName("Loen");
cout << myObj.getName();
return 0;
}
//输出 "Loen"
我们使用封装来隐藏来自外部代码的名称属性。然后我们使用公共方法提供访问权限。我们的类数据只能通过这些方法读取和修改。
这样允许更改方法和属性的实现,而不会影响外部代码。
声明一个类
用关键字 class 定义类。按照带有类名和类体的关键字,用一组大括号(花括号)括起来。
以下代码声明了一个名为 BankAccount 的类:
class BankAccount {
public:
void sayHi() {
cout << "Hi,OOP" << endl;
}
};
一个类的定义必须跟一个分号。在大括号内定义类的所有属性和行为(或成员)。
您还可以为类的成员定义访问说明符。
已经使用 public 关键字定义的成员可以从类外部访问,只要它在类对象范围内的任何位置。
你也可以指定一个类的成员为 private 或 protected 的。
下一步是实例化我们的 BankAccount 类的一个对象,就像我们定义一个类型的变量一样,区别在于我们的对象的类型是 BankAccount。
int main()
{
BankAccount icbc;
icbc.sayHi();
}
//输出 Hi,OOP
我们的名为 icbc的对象已经拥有了所有类的成员。
在这里
- icbc是一个对象,它属于BankAccount 类
- 如果创建一个abc 那么它也是一个对象 它也属于BankAccount 类
注意用于访问和调用对象的方法的点分隔符 . (英文点符号)
我们必须在使用它之前声明一个类,就像我们对函数做的一样。
类和对象的关系
在生活中例如 猫科动物
我们可以划分一个猫科动物类
那么
家猫 属于 猫科动物
老虎也属于猫科动物
他们都是 对象 而且都属于 猫科动物类
我们称 猫和老虎 是对象
猫科动物就是类
构造函数
类构造函数是类的特殊成员函数。无论何时在该类中创建新对象,都会执行它们。
无参构造
构造函数的名称与该类的名称完全相同。它没有返回类型,甚至 void 类型。
class myClass {
public:
myClass() { //这里是构造函数,只要创建对象这里的代码就会执行
cout <<"Loen";
}
void setName(string x) {
name = x;
}
string getName() {
return name;
}
private:
string name;
};
int main() {
myClass myObj;
return 0;
}
//输出 "Loen"
在创建一个 myClass 类型的对象时,构造函数会自动调用。
有参构造
创建对象时,您现在需要传递构造函数的参数,就像调用函数时一样:
class myClass {
public:
myClass(string nm) {
setName(nm);
}
void setName(string x) {
name = x;
}
string getName() {
return name;
}
private:
string name;
};
int main() {
myClass ob1("eeedong");
myClass ob2("Amy");
cout << ob1.getName();
}
//输出 "eeedong"
我们定义了两个对象,并使用构造函数传递每个对象的 name 属性的初始值。
可能有多个构造函数他们有不同数量的参数。
析构函数
析构函数的名字将与该类完全相同,只是有前缀(~)。析构函数不能返回值或取任何参数。
class MyClass {
public:
MyClass() {//构造函数
//这里的代码在创建对象时候自动执行
// some code
}
~MyClass() {//析构函数
//这里的代码在销毁对象时候自动执行
// some code
}
};
析构函数在退出程序之前可以非常有用地释放资源。这可以包括关闭文件,释放内存等等。
delete 变量名; 进行销毁
选择操作符
使用对象时,使用点成员选择操作符(.)。
int main() {
MyClass obj;
MyClass *ptr = &obj;
ptr->myPrint();
}
使用指向对象的指针时,请使用箭头成员选择操作符( ->)。
int main() {
MyClass obj;
obj.myPrint();
}
综合案例
#include <iostream>
#include <string>
using namespace std;
class BankAccount {
public:
BankAccount(string s) { //构造函数
name = s;
cout << "创建了一个" << getName() << endl;
}
~BankAccount() {//析构函数
cout << getName()<< "倒闭了" << endl;
}
string getName() {//返回name的值
return name;
}
void sayHi() { //打招呼
cout << "Hi I'm" << getName() << endl;
}
private:
//设置name
void setName(string x) {
name = x;
}
string name;
};
int main()
{
BankAccount test = BankAccount("交通银行");//使用变量创建对象
test.sayHi();//变量使用点操作
BankAccount *p = new BankAccount("建设银行");//使用指针创建对象
p->sayHi();//指针使用箭头
delete p; //释放内存
}
输出结果:
创建了一个交通银行
Hi I'm交通银行
创建了一个建设银行
Hi I'm建设银行
建设银行倒闭了
小练习
1.请举例生活中常见的类和对象,并且说明他们的关系
2.创建一个猫科动物类(构造方法提供名称和叫的方式两个参数),并且声明一个猫(喵喵叫)和一个老虎(怒吼叫)两个对象
如果你有兴趣的话,欢迎把你的答案在评论区中发表
上一篇[C++学习日记]-08-函数
下一篇[C++学习日记]-10-对象的使用
来源:CSDN
作者:Timeless小帅
链接:https://blog.csdn.net/qq_18604209/article/details/103995011