提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
一、面向对象的编程思想
万物皆可对象,不再向c语言那样分析问题按步骤解析,而是对物体进行抽象出来一个类,然后增加这一类的行为。
1.面向对象和过程的区别
面向过程,分析问题,找出解决问题的步骤,然后用函数实现每个步骤的功能,使用的一次调用。
面向对象,分析问题,将问题分成各个对象,然后建立对象,建立对象是为了描述对象在整个解决问题中的行为。
二、前三章与c语言中不同
1.简单语法
c++中的对象:就是内存中的实体也就是C语言中的变量
命名空间:using namespace std;
输入:cin>>addr;
输出:cout <<“name:”<<“\t” <<name << endl;
多关键字:new
多一个数据类型:bool
c++11中
2.存储类型
四种存储类型:
auto关键字的修正:auto i = 表达式,可以推算表达式结果的数据类型(自动推导数据类型),
注意:(1)必须初始化,(2)不做函数参数
register:不能取地址
extern:用来声明函数,声明变量
static:修饰局部变量,全局变量,函数。
const:在c++中修饰对象成为,常量,在c中称为只读变量。
3.循环
在c++中for循环:base range for
for(auto x: a)
{
}
4.引用
函数中值传递地址传递,
c++引用,相当于变量的别名。
引用注意事项:
- 引用必须初始化
- 在某个范围一旦一个变量名与别人产生映射关系不能再用来引用其他变量
引用与指针的区别
(1)引用必须初始化
(2)有空指针没有空引用
(3)引用不占用内存空间
其本质:
- 是一个指针常量,指向你所修饰的变量,因此不可更改
5.内联函数
inline关键字也是一种建议:
内联函数:编译器会再所有执行该函数的地方展开代码,避免了函数入栈和出栈的过程,提升了该函数的运行效率。缺点:代码变成了,空间换时间跟结构体对齐是一样的。
如果某个函数被声明为内联函数,则在它调用的每一个.c文件中必须加该函数的定义,所以内联函数必须定义在头文件
6.默认参数
只在头文件中声明,若有默认参数则顺序为从右向左,不能出现二义性。
7.函数的重载
在一定作用域内,同名不同参的函数成为函数的重载,有三种情况
(1)参数的类型不同
(2)参数的数量不同
(3)参数的顺序不同
void fun() {
cout << "this is no args " << endl;
}
void fun(int num) {
cout << "this is args " << endl;
}
void fun(double num) {
cout << "this is diff double args " << endl;
}
注意事项:
1.函数的返回值不可以作为函数重载的条件:
void fun(double num) {
cout << "this is diff double args " << endl;
}
int fun(double num) {
cout << "this is diff return args " << endl;
return 0;
}
2.引用作为重载条件
3.函数重载遇到默认参数,要避免出现二义性
int func(int a, int b = 10) {
cout << "this is diff return args " << endl;
return 0;
}
int func(int a) {
cout << "this is diff return args " << endl;
return 0;
}
三、面向对象编程的基本特点
1.抽象
对编程的问题进行数据抽象和行为抽象。
2.封装
将抽象出来的数据和行为封装成一个有机的整体,为使用者提供方便。
2.1访问权限:
公共权限:public 成员内部可以访问 类外可以访问
保护权限:protected 成员内部可以访问 类外可以访问 子类可以访问父类的保护内容
私有权限:private 成员内部可以访问 类外可以访问 子类可以访问父类的私有内容
2.2struct 和class区别
struct默认权限为公共
class默认权限为私有
struct C
{
/* data */
int m_d;
};
class C2
{
int m_d;
};
int main()
{
C test1;
test1.m_d = 20;
C2 test2;
test2.m_d = 20;
}
3.继承
在继承原有类的特性的基础上,进行更具体和详细的的说明。
4.多态
一段程序能够处理多种类型数据对象的能力,包含四种多态方式强制多态、重载多态、类型参数多态、包含多态。
简单类的实例:
#include<iostream>
using namespace std;
#include<string>
double PI = 3.14;
class Circle
{
private:
/* data */
public:
Circle(/* args */);
~ Circle();
int m_r;
double CalculateZC()
{
return 2 * PI * m_r;
}
};
Circle:: Circle(/* args */)
{
}
Circle::~ Circle()
{
}
int main()
{
Circle TEST;
TEST.m_r = 2;
cout << "周长 = " << TEST.CalculateZC() << endl;
}