目录
一、什么是类:
在C++中,类是一种用户定义的数据类型,它可以包含数据成员和成员函数。类是面向对象编程的基本概念之一,它可以用来表示现实世界中的实体和抽象概念。
二、C++类的基本结构
1、数据成员:定义类的属性。这些是类内部的变量,用于存储对象的状态。
2、成员函数:定义类的行为。这些是可以操作对象的数据成员的函数。
3、构造函数和析构函数
4、访问修饰符
5、继承
三、类的格式
class Person //类的名字都是大写字母开头的
{
//数据成员
string name; //在C++中字符串用string表示
int age;
public:
//成员函数
void setname() //在类的内部构建
{
name = lazy_sheep; //在类的内部可以直接使用数据成员
}
};
四、认识C++权限:
访问权限 | 类内部 | 同一个类的对象 | 派生类 | 类内部 |
---|---|---|---|---|
public | √ | √ | √ | √ |
private | √ | × | × | × |
protected | √ | × | √ | × |
案例:
银行案例
类:存款人信息
账户额度
对象:具体的存款人
需求:
对象不能私自更改账户额度,需要一个操作流程,比如去ATM机或者柜台进行操作才能修改到账户额度;
存款人信息和账户额度设计成私有权限,通过公有流程实现,也就是公有函数去操作私有变量。
附示例代码:不想写了
五、在类的外部进行成员函数的实现
clPerson
{
public:
//数据成员
string name;
int age;
string sex;
//成员函数
void personMessage(); //声明成员函数
};
//在类的外部进行成员函数的实现
vPerson::personMessage()
{
//(1) 用::确定personMessage()属于person类
//(2)同一类的成员函数对于同一类的数据成员是可以直接访问的
}
int main()
{
Person happy_sheep; 创建对象
Person lazy_sheep;
return 0;
}
附示例代码:
/*
本程序为验证C++中类数据成员、成员函数、权限使用
验证在类的外部进行成员函数的实现
*/
#include <iostream>
#include <string>
using namespace std;
class Student
{
//public属性
public:
//数据成员
string name; //姓名
string sex; //性别
int age = 0; //年龄
double result; //成绩
//成员函数
void studentMessage(); //声明成员函数
};
//在类的外部进行成员函数的实现
void Student::studentMessage() //::用于确认studentMessage属于student类
{
string str = "姓名:"+ name+"性别:"+ sex+"年龄:"+ std::to_string(age)
+"成绩:"+ std::to_string(result);
cout << str << endl;
}
int main()
{
Student sheep1;
sheep1.name = "happy_sheep";
sheep1.sex = "man";
sheep1.age = 12;
sheep1.result = 90.12;
sheep1.studentMessage();
Student sheep2;
sheep2.name = "lazy_sheep";
sheep2.sex = "man";
sheep2.age = 10;
sheep2.result = 90;
sheep2.studentMessage();
return 0;
}
六、类的组合:
什么是类的组合:在C++中,一个类包含另一个类的对象成为组合。
1、定义一个对象(类的组合)
class Feature //身体特征
{
public:
float height; //身高
float weight; //体重
};
class Student
{
public:
Feature sheep_weight; //在另外一个类中创建对象(重点)
};
int mian()
{
//使用类的组合
Student sheep1; //创建对象
sheep1.sheep_weight.weight = 90.1;
return 0;
}
附示例代码:
/*
验证C++中类的组合(创建对象)
*/
#include <iostream>
#include <string>
using namespace std;
//身体特征
class Feature
{
public:
float height; //身高
float weight; //体重
};
class Student
{
//public属性
public:
//数据成员
string name; //姓名
string sex; //性别
int age = 0; //年龄
double result; //成绩
Feature sheep_height;
//成员函数
void studentMessage(); //声明成员函数
};
//在类的外部进行成员函数的实现
void Student::studentMessage() //::用于确认studentMessage属于student类
{
string str = "姓名:"+ name+"性别:"+ sex+"年龄:"
+ std::to_string(age)
+"成绩:"+ std::to_string(result)
+"身高"+std::to_string(sheep_height.height);
cout << str << endl;
}
int main()
{
Student sheep1;
sheep1.name = "happy_sheep";
sheep1.sex = "man";
sheep1.age = 12;
sheep1.result = 90.12;
sheep1.sheep_height.height = 100;
sheep1.studentMessage();
Student sheep2;
sheep2.name = "lazy_sheep";
sheep2.sex = "man";
sheep2.age = 10;
sheep2.result = 90;
sheep2.sheep_height.height = 91;
sheep2.studentMessage();
return 0;
}
2、定义一个指针对象
注:如果在另外一个类里面创建指针对象是,需要先 new
class Feature //身体特征
{
public:
float height; //身高
float weight; //体重
};
class Student
{
public:
Feature* sheep_weight = new Feature (); //在另外一个类中创建指针对象(重点)
};
int mian()
{
//使用类的组合
Student sheep1; //创建对象
sheep1.sheep_weight->weight = 90.1;
return 0;
}
附示例代码
/*
验证C++中类的组合(创建指针对象)
*/
#include <iostream>
#include <string>
using namespace std;
//身体特征
class Feature
{
public:
float height; //身高
float weight; //体重
};
class Student
{
//public属性
public:
//数据成员
string name; //姓名
string sex; //性别
int age = 0; //年龄
double result; //成绩
Feature* sheep_height = new Feature (); //创建指针对象
//成员函数
void studentMessage(); //声明成员函数
};
//在类的外部进行成员函数的实现
void Student::studentMessage() //::用于确认studentMessage属于student类
{
string str = "姓名:"+ name+"性别:"+ sex+"年龄:"
+ std::to_string(age)
+"成绩:"+ std::to_string(result)
+"身高"+std::to_string(sheep_height->height);
cout << str << endl;
}
int main()
{
Student sheep1;
sheep1.name = "happy_sheep";
sheep1.sex = "man";
sheep1.age = 12;
sheep1.result = 90.12;
sheep1.sheep_height->height = 100;
sheep1.studentMessage();
Student sheep2;
sheep2.name = "lazy_sheep";
sheep2.sex = "man";
sheep2.age = 10;
sheep2.result = 90;
sheep2.sheep_height->height = 91;
sheep2.studentMessage();
return 0;
}
七、函数重载
1、什么是函数重载
在同一个作用域内,可以声明几个功能类似的同名函数。这些同名函数的形式参数(参数的个数,类型或者顺序)必须不同。不能仅通过返回类型的不同来重载函数。
附示例代码:
/*
验证C++函数重载
*/
#include <iostream>
using namespace std;
class Print
{
public:
void print(int num)
{
cout << num << endl;
}
void print(double num)
{
cout << num << endl;
}
void print(char c)
{
cout << c << endl;
}
};
int main()
{
Print myPrint;
myPrint.print(10);
myPrint.print('A');
myPrint.print(10.01);
return 0;
}
八、运算符重载
什么是运算符重载
在C++中,运算符重载是一个允许程序员自定义各种运算符(如+ - = !=等)在自定义类型(类或结构体)上的行为的特征。这意味着你可以定义类似内置类型的运算符行为,是你的自定义类型更加直观和易于使用。
附示例代码:
/*
验证运算符重载
operator关键字
*/
#include <iostream>
using namespace std;
class Coor
{
public:
int x;
int y;
Coor operator+(Coor pTmp);
};
Coor Coor::operator+(Coor pTmp)
{
Coor ret;
ret.x = x + pTmp.x;
ret.y = y + pTmp.y;
return ret;
}
int main()
{
Coor c1;
c1.x = 3;
c1.y = 4;
Coor c2;
c2.x = 1;
c2.y = 2;
Coor c3;
c3 = c1 + c2;
cout << "c3.x = " << c3.x << endl;
cout << "c3.y = " << c3.y << endl;
return 0;
}
九、初始化列表
在C++中,使用初始化列表来初始化类的字段景一种高效的切始化方式,尤具在构造函数中。初始化列表直接在对象的构造过程中初始化成员变量,而不是先创建成员变量后再赋值。这对于提高性能尤其重要,特别是在涉及到复杂对象或引用和常量成员的情况下。
初始化列表紧跟在构造函数参数列表后面,以需号(+)开始,后跟一个或多个初始化表达式,每个表达式通常用逗号分隔。
初始化列表创建方式 :
初始化列表紧跟在构造函数参数列表后面,以冒号(:)开始 ,后跟一个或多个初始化表达式,每个表达式通常用逗号分割。
举例如下:
class Myclass
{
private:
int a;
double b;
string c;
public:
//使用初始化列表来初始化字段
Myclass(int x,double y,const string& z) : a(),b(),c()
};
解释:
(1)在本实例中,Myclass有三个成员变量:a(int 类型)、b(double 类型)、c(string 类型)。当创建Myclass的一个实例时,我们通过构造函数传递三个参数,这些参数用于通过初始化列表直接初始化成员变量。
(2)初始化列表
:a(x),b(y),c(z)
意思为: x 初始化 a
y 初始化 b
z 初始化 c
注:
成员变量的初始化顺序是按照它们在类中声明的顺序,而不是初始化列表中的顺序。