什么是C++,C语言是一门结构化和模块化的语言,适合处理较小规模大的程序,于是就提出了一种面向对象的思想,C++就是基于C开发出的面向对象的语言,它既可以进行C的面向过程程序设计,又可以进行基于对象的程序设计,还可以进行面向对象的程序设计。
C++里的专业术语
1)类:class
描写现实世界中的事物(包括特征和行为),例如:人,特征:身高、年龄、性别、肤色,行为:吃饭、走路、睡觉等等,它实质是抽象的描述事物,它其实是不存在的。
(2)对象
对象是类的实例化,实实在在存在于现实世界中,特指的概念
(3)继承
相当于是一个新类共享了另一个或多个类的特征和行为,该新类和其他类的关系,称之为继承,例如:儿子 父亲 ----继承
(4)多态
多种形态,一种接口,多种方法,举例:你(8岁) 父亲 -----买票行为-----你买票(半票)---父亲(全票)
(5)封装
c语言里函数就是封装的概念,将数据和数据的操作封装在一起
(6)组合(聚合)
一个类中包含了另一个类的对象,就将类和另一个类的对象的关系,称之为组合关系
(7)静态联编(静态绑定)
一个数据的表达式的类型在编译的时候就已经确定了,称之为静态绑定
(8)动态绑定(动态联编)
一个数据的表达式的类型在运行的时候才确定,称之为动态绑定,典型:多态
(9)特征&属性
在C++特征&属性就是代表变量,如果变量存在于类中,那么称之为成员变量
(10)行为&方法
在C++行为&方法就是代表函数,如果函数存在于类中,那么称之为成员函数
命名空间
用于存放变量、函数和类,在编写程序中,可能会出现命名重复的时候,命名空间就是对标识符进行区分,避免冲突。
关键字:namespace
格式:namespace+标识符 ------->表示创建一个命名空间
namespace ysm
{
int a=5;
int b=6;
void add()
{
return a+b;
}
}
注:命名空间可以嵌套、同一个工程中可以存在多个相同名字的命名空间
命名空间的调用
域作用符号::,通过命名空间::命名空间成员,这样就可以访问到命名空间相应的成员
#include<iostream>
using namespace std;
namespace ysm
{
int a=5;
int b=6;
int function()
{
return a+b;
}
}
int main()
{
cout<<"a+b="<<ysm::function<<endl;
return 0;
}
输入输出
#include<iostream>
using namespace std;
int a,b,c;
void input()
{
cin>>a;
cin>>b>>c; //关键字cin+>>,表示输入b的值
}
void output()
{
cout<<"a="<<a<<"b="<<b<<"c="<<c<<endl;
}
int main()
{
input();
output();
return 0;
}
注:输入是“>>”符号,输出是“<<”符号,输出结尾有“endl”字符串,表示输出结束换行。
内存模型
代码区:存放函数的二进制代码,由操作系统进行管理;
全局区:存放全局变量和静态变量以及常量
栈区:由编译器自动分配和释放,若程序员不释放,程序结束时由草走系统回收
堆区:(即自由存储区),在类的实例化过程中在栈区和堆区为其分配内存,是为每个对象生成一个拷贝。
注:不同区域存放的数据,赋予不同的生命周期。
类和对象
类(class)
描述现实世界中的事务,用C++进行编程的时候,通常是将现实的事物用类来描述, ,类的关键字:class
class 类名 (标识符名称)
{
特征--->变量
行为---->函数
};
#include<iostream>
using namespace std;
class student
{
public:
const char* name; //描述姓名
const char* sex; //描述性别
int age;//描述年龄
int No;//描述学号
void eat()
{
//描述吃饭的行为
}
void sleep()
{
//描述睡觉的行为
}
};
int main()
{
student zhangsan;
zhangsan.name = "张三";
zhangsan.sex = "男";
zhangsan.age = 22;
zhangsan.No = 20191109;
cout <<"姓名:" << zhangsan.name << endl;
cout << "年龄:" << zhangsan.age << endl;
cout << "性别:" << zhangsan.sex << endl;
cout << "学号:" << zhangsan.No << endl;
return 0;
}
运行结果为:
对象
对象是类的实例化(特指实际的例子),是特指的概念。
(1)在栈区实例化
格式:类名+对象名(标识符名称)
student zhangsan
访问格式:
对象名(标识符名称).成员
zhangsan.name / zhangsan.eat
(2)在堆区实例化
格式:类名 * 对象名(标识符名称)= new 类名;
student * zhangsan = new student;
访问格式:
对象名(标识符名称)-> 成员;
zhangsan->No /zhangsan->sex
类的成员访问修饰符
public(公共)、protected(受保护)、private(私有)
构造函数
构造函数值一种特殊的函数,它实质还是函数,如果用户没有编写构造函数,那么编译器会自动生成一个默认的构造函数。
作用:初始化类的成员变量
格式:
类名 (参数列表)
{
//代码块---用于初始化类的成员变量
}