介绍
面向对象
- What(为什么使用面向对象)
1.适合开发大型软件
2.数据抽象、代码复用、提升效率、降低成本
3.可利用已有现成的设计模式和应用框架- Where(什么是面向对象)
1.将软件看成对象组成的空间,每个对象都拥有足够智能,能了解其他对象信息,并做出反应
2.底层对象 能从 高层对象 继承 属性和行为
3.面向对象三大特性:封装、继承、多态- Why(怎么学习面向对象)
1.理解封装、继承、多态
2.学习设计模式,利用别人成功经验
类(class)和对象
- What(为什么使用类和对象)
1.类 用来形容现实中 真实的对象 在虚拟世界中进行 实例化- Where(什么是类和对象)
1.拥有 相同属性(类型表示) 和 行为(函数表示) 的一组对象
2.类 是一种用户自定义的 类型数据,包括表示属性的成员变量和表示行为的成员函数
3.类 是在现实世界对象的 抽象,对象 是类在虚拟世界的 实例- Why(怎么学习类和对象)
1.类的组成方式图示:
访问控制限定符
关键词 | 作用 |
---|---|
public: | (公有成员) 谁都可以访问 |
protected: | (保护成员) 只有在 类 内部和 派生类 内部可以访问 |
private: | (私有成员) 只有 类 内部可以访问 |
源码:
#include<iostream>
using namespace std;
//构造一个类
class YiHang{
//公有成员
public:
void set_sex(char* sex)//通过传参修改私有变量内容
{
strcpy(S_sex, sex);
}
void get_sex()//访问私有变量
{
cout << S_sex << endl;//内部访问私有变量
}
void get_name()
{
cout << "一航ciao" << endl;
}
int age = 18;//公有成员
//私有成员
private:
char S_sex[20];//私有成员
};
void main()
{
//栈区对象
YiHang yh;//类型名
//打印名字
yh.get_name();
//打印性别
//yh.sex;//外部无法访问的(会直接报错)
//外部传参到内部
yh.set_sex("男");
//访问私有变量
yh.get_sex();
//打印年龄
//公有变量age:可以通过外部访问修改变量
yh.age = 19;
cout << yh.age << endl;
//堆区对象
YiHang *Pyh = new YiHang;
Pyh->age = 20;//访问方式
cout << yh.age << endl;
delete Pyh;
//创建多个栈区对象
YiHang yh2[4];
yh2[1].age = 16;
cout << yh2[1].age << endl;
//创建多个堆区对象
YiHang *Pyh2 = new YiHang[3];
Pyh2[1].age = 20;//访问方式
cout << Pyh2[1].age << endl;
delete[] Pyh2;
system("pause");
}
封装
- 将实现的细节隐藏,暴露公有接口(留后门)
- 对不同成员控制访问属性加以区分,体现了C++ 面向对象的封装性
string(字符串)
头文件:#include
此 类 内部提供了多个函数操作
详情参考:basic_string 类
源码
#include<iostream>
#include<string>
using namespace std;
void main()
{
//字符串创建:
string s1("hello");
string s2 = "world";
string* s3 = new string("space");
//复制操作
string s4 = s2;//将s2的复制到s4
cout << s4 << " ";
s1 = s2;//将s2的复制到s1
cout << s1 << endl;
//比较
if (s1 == s4)
{
cout << "yes" << endl;
}
s1 = "12z";
s2 = "123";
if (s1 > s2)//比较大小是通过ASCII码逐个比较大小
{
cout << "yes" << endl;
}
//拼接
s4 = s4 + " world";
cout << s4 << endl;
s4 += " space";
cout << s4 << endl;
s4.append(" yi");//末尾处插入
cout << s4 << endl;
s4.push_back('!');//末尾处插入单个字符
cout << s4 << endl;
//交换
s1.swap(s4);//将s4字符串交换到s1
cout << "交换后s1 = " << s1 << endl;
cout<< "交换后s4 = " << s4 << endl;
//长度
cout << sizeof(s1) << endl;
cout << s1.length() << endl;
//替换
/*********************************************************
代码解释:
s1.replace(需要替换的字符串,需要替换的长度,替换后的字符串)
s1.find(查找指定字符串, 从第几个开始查找)
*********************************************************/
s1.replace(s1.find("world", 0), 5, "12345");
cout << s1 << endl;
system("pause");
}
笔记扩充
- private(私有成员)的变量命名:采用 首字母大写 然后 加下划线
例子:
private:
char S_sex[20];//私有成员
- 类 的调用方法:采用 类名 + 点 + 变量名(函数名) 进行调用
例子:
1.调用变量:yh.age = 19;
2.调用函数:yh.get_sex();
- 类 和 结构体 本质没有区别,但是:
1.类(class)默认访问控制属性为 private(私有的)
2.结构体(struct)默认访问控制属性为 public(公共的)