C++笔记

C++简介

1.开发者:Bjarne Stroustrup于1979年在贝尔实验室开发的。
2.与c的区别:
C++是面向对象的,C是面向过程的;
C++函数库紧密,C的函数库松散

C++面向过程:

基本概念

类:描述对象行为/状态的模板,抽象
对象:具有行为和状态,具体
方法:表示一种行为
标识符:用来表示变量、函数、类、模块或者其他用户定义项目的名称。
以字母或者下划线开头,组成:字母、数字、下划线
C++关键字:C++专用词汇
函数:一组一起执行一个任务的语句
HelloWorld代码

#include <iostream>//<iostream>为C++的头文件
using namespace std;
 //告诉编译器使用标准(std)命名空间
int main()// main() 是程序开始执行的地方
{
   cout << "Hello World"; // 输出 Hello World
   return 0;//结束main()函数
}

注释:解释代码的含义
单行注释://…
多行:/* … */

基本类型和变量

1.常用的数据类型
bool 布尔型 true或者false
char 字符型 一个字符
int 整型 整数
float 浮点型 单精度的浮点值
double 双浮点型 双精度的浮点值
2.变量:程序可操作的存储区的名称,变化的量。
定义

int number = 20//int:表示数据类型为整型,number 为变量名,‘=20’为给number变量赋值20

3.作用域:即变量的有效范围
局部变量:在函数或者代码块内部声明
形参:函数参数中定义声明的
全局:所有函数外部声明的
4.引用:可以理解为别名

int i = 17int &r = i;//r为i的引用,即i的别名,引用必须要被初始化

5.指针:是一个变量,其中的值是另一个变量的指针。

int  var = 20;   // 实际变量的声明    
int  *ip;        // 指针变量的声明      
ip = &var;       // 在指针变量中存储 var 的地址
cout << *ip << endl; 访问指针中地址的值

&为取地址符,*为解地址符
6.指针与引用
6.1 不存在空引用。引用必须连接到一块合法的内存。
6.2 一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
6.3 引用必须在创建时被初始化。指针可以在任何时间被初始化。
6.4引用本身不是一个对象,不能定义指向引用的指针,指针是对象可以定义指针的引用

int i = 42int *p;
int *&r = p;//r是一个对指针p的引用

常量

1.常量:值固定不变的量
2.常量可以是任何的数据类型
3.定义:大写字符定义
#define预处理 例:#define NUMBER 10
const关键字 例:const int NUMBER = 10

表达式

1.算数运算符:+ ,- ,* ,/ ,%(取模),++(自增), --(自减)
2.关系运算符:==相等, !=不等, > ,< ,>= ,<=.
3.逻辑运算符:&& 与,|| 或,!非
4.位运算法
& 如果同时存在于两个操作数中,二进制 AND 运算符复制一位到结果中。
| 如果存在于任一操作数中,二进制 OR 运算符复制一位到结果中。
^ 如果存在于其中一个操作数中但不同时存在于两个操作数中,二进制异或运算符复制一位到结果。
~ 二进制补码运算符是一元运算符,具有"翻转"位效果,即0变成1,1变成0。
<< 二进制左移运算符。左操作数的值向左移动右操作数指定的位数。
‘>>’ 二进制右移运算符。左操作数的值向右移动右操作数指定的位数。

函数

1.定义

int number(int a);//函数声明,告诉编译器如何调用,函数体可以自己单独定义
int number(int a )//int 为函数返回值类型,函数名为number,int为参数类型,a 为形式参数
{
//函数体
}

2.参数传递
a.传值参数:
该方法把参数的实际值赋值给函数的形式参数。在这种情况下,修改函数内的形式参数对实际参数没有影响。

int i = 0;//int 类型的初始变量
int i = n;//i是n的值的副本
i = 42;//i的值改变,n 的值不变
void swap(int x,int y);//声明一个交换两个数的函数,x,y为形参
swap(a,b);//a,b的值不变

b.指针
该方法把参数的地址赋值给形式参数。在函数内,该地址用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。

void swap(int *x,int *y);声明一个交换两个数的函数,*x,*y为形参
swap(&a,&b);//a,b的值发生变化

c.引用
该方法把参数的引用赋值给形式参数。在函数内,该引用用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。

void swap(int &x, int &y);
swap(a,b);//a,b的值发生变化

数组和字符串

数组–
1.定义
:存储一系列固定大小,相同类型的顺序集合
2.声明:

type arrary [arrarysize];//type为数组类型,arrary为数组名,arrarySize是数组的容量

3.初始化:

int number[5]={10,20,30,40,50};
int number[]={10,20,30,40,50};

4.访问:

int number[5]={10,20,30,40,50};//通过数组下标访问数组内的某个元素
for(int i = 0; i < 5;I++)
{
cout<<number[i]<<endl;//通过for循环遍历输出数组所有元素。
}

多维数组以此类推;
字符串-
1.定义:采用String 来定义字符串

string str1 = "runoob";   
string str2 = "google";

2.常用的操作
append() – 在字符串的末尾添加字符
find() – 在字符串中查找字符串
insert() – 插入字符
length() – 返回字符串的长度
replace() – 替换字符串
substr() – 返回某个子字符串
strcpy(s1, s2); 复制字符串 s2 到字符串 s1。
vector-
1.定义:对象的集合,也叫做容器
2.声明:
必须包含头文件:#include using std :: vector;
vector v1 ;T为容器的类型,可以是int double等等
3.操作:
.empty() 判空
size() 返回元素个数

数据结构

1.定义

struct type_name {//type_name为结构体类型名称
member_type1 member_name1;//member_type1 member_name1 是标准的变量定义
member_type2 member_name2;
member_type3 member_name3;
} object_names;//变量名

typedef关键字
可以为创建的类型取一个"别名"

typedef struct Books
{
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
}Books;//可以直接使用Books来定义Books类型的变量

2.访问

struct Books// 声明一个结构体类型 Books 
{
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
};
 Books Book1; // 定义结构体类型 Books 的变量 Book1
 strcpy( Book1.title, "C++ 教程");
   cout << "第一本书标题 : " << Book1.title <<endl;// 输出 Book1 信息

语句

1.简单语句:以分号结尾
2.条件语句:

a.if

if(boolean_expression){   
 // 如果布尔表达式为真将执行的语句
 }//布尔表达式为假,则执行下边的语句

b.if -else

if(boolean_expression)
{
   // 如果布尔表达式为真将执行的语句
}
else
{
   // 如果布尔表达式为假将执行的语句
}

c.嵌套
可以在一个 if 或 else if 语句内使用另一个 if 或 else if 语句。
d.switch
测试一个变量等于多个值,加break可以跳出,不加,则会从头一直判断到结束

switch(expression){
    case constant-expression  :
       statement(s);
       break; // 可选的
    case constant-expression  :
       statement(s);
       break; // 可选的
    // 您可以有任意数量的 case 语句
    default : // 可选的
       statement(s);
}

switch 也可以嵌套使用
3.循环语句
a.while

while(condition)//
{
   statement(s);
}//先判断条件,当条件为真时候执行语句;,为假时结束循环

b.do - while

do
{
   statement(s);

}while( condition );//先循环,在判断条件,条件为真时执行语句,为假时结束循环

c.for

for( int a = 10; a < 20; a = a + 1 )
   {
       cout << "a 的值:" << a << endl;
   }
   //执行a = 10,然后进行判断,如果a < 20为真,则执行主体语句,然后会跳到 a = a + 1;,再进行判断操作,如果a < 20为假则结束循环。

C++面向对象:

类和对象

1.定义:描述对象行为/状态的蓝图

class Box //class为类关键字,Box为类的名称
{
   public://类成员的访问修饰符
      double length;   // 盒子的长度
      double breadth;  // 盒子的宽度
      double height;   // 盒子的高度
      //Box类包含三个数据成员
      double get(void);//类成员函数声明
};
double Box::get(void)//成员函数定义
{
    return length * breadth * height;
}

a.类成员函数
指那些把定义和原型写在类定义内部的函数,就像类定义中的其他变量一样。类成员函数是类的一个成员,它可以操作类的任意对象,可以访问对象中的所有成员。
b.类访问修饰符
它防止函数直接访问类类型的内部成员
public: // 公有成员
公有成员在程序中类的外部是可访问的。您可以不使用任何成员函数来设置和获取公有变量的值
protected:// 受保护成员
受保护成员变量或函数与私有成员十分相似,但有一点不同,protected(受保护)成员在派生类(即子类)中是可访问的。
private: // 私有成员
私有成员变量或函数在类的外部是不可访问的,甚至是不可查看的。只有类和友元函数可以访问私有成员。
c.构造和析构函数
两者都是特殊的成员函数
构造:每次创建类的新对象时候执行
析构:每次删除类的对象的时候执行

class Box 
{	
   private:
      double length;   // 盒子的长度
      double breadth;  // 盒子的宽度
      double height;   // 盒子的高度
      //Box类包含三个数据成员
   public:
   	  Box();//不带参的构造函数声明,必须与类名一致
   	  Box(double length;double breadth;double height);
   	  //带参数的构造函数声明
   	  ~Box();//析构函数声明
      double get(void);//类成员函数定义  
};

d.友元函数
类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。

class Box 
{
   private:
      double length;   // 盒子的长度
      double breadth;  // 盒子的宽度
      double height;   // 盒子的高度    
   public:
   	  friend void printWidth(Box box);
   	  //友元函数声明
};

e.this指针
每一个对象都能通过 this 指针来访问自己的地址。this 指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。
f.静态成员

class Box 
{
   public:
      static double length;   //静态成员声明 
};

当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。
静态成员函数只能访问静态成员数据、其他静态成员函数和类外部的其他函数。

对象

定义:对象具有的状态和行为。

Box Box1;//声明Box1,类型为 Box

访问:类的对象的公共数据成员可以使用直接成员访问运算符 .来访问。私有的可以调用公共成员函数来访问。

 Box Box1; 
	 Box1.height = 5.0; 
     Box1.length = 6.0; 
     Box1.breadth = 7.0;

继承

1.定义:依据另一个类来定义一个类
基类:指定的类
派生类:新建的类
一个基类可以有多个派生类

class Animal {// 基类
     eat() 函数
     sleep() 函数
};
class Dog : public Animal {//派生类,为公有继承类型
     bark() 函数
};

2.继承类型
公有继承(public):当一个类派生自公有基类时,基类的公有成员也是派生类的公有成员,基类的保护成员也是派生类的保护成员,基类的私有成员不能直接被派生类访问,但是可以通过调用基类的公有和保护成员来访问。
保护继承(protected): 当一个类派生自保护基类时,基类的公有和保护成员将成为派生类的保护成员。
私有继承(private):当一个类派生自私有基类时,基类的公有和保护成员将成为派生类的私有成员。

多态

1.定义:多种形态,同一函数声明的不同实现方式
2.虚函数:在基类中使用关键字 virtual 声明的函数。在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数。
3.纯虚函数:
基类中定义虚函数,以便在派生类中重新定义该函数更好地适用于对象,但是在基类中又不能对虚函数给出有意义的实现,这个时候就会用到纯虚函数。

class Shape {
   protected:
      int width, height;
   public:
      Shape( int a=0, int b=0)
      {
         width = a;
         height = b;
      }
      virtual int area() = 0;//纯虚函数
};

接口(抽象类)

1.数据抽象
只向外界提供关键信息,并隐藏其后台的实现细节,即只表现必要的信息而不呈现细节。

class Adder{
   public:
      Adder(int i = 0)//构造函数
      {
        total = i;
      }
      void addNum(int number)//接口
      {
          total += number;
      }
   private:
      // 对外隐藏的数据
      int total;
};

2.接口:描述了类的行为和功能,而不需要完成类的特定实现

class Box
{
   public:
      virtual double getVolume() = 0;  // 纯虚函数
   private:
      double length;      // 长度
      double breadth;     // 宽度
      double height;      // 高度
};

重载运算符和重载函数

1.运算符重载: 重新定义运算符,operator关键字
不可重载的运算符
.:成员访问运算符
., ->:成员指针访问运算符
:::域运算符
sizeof:长度运算符
?::条件运算符
#: 预处理符号

      Box operator+(const Box& b)// 重载 + 运算符,用于把两个 Box 对象相加,
      {
         Box box;
         box.length = this->length + b.length;
         box.breadth = this->breadth + b.breadth;
         box.height = this->height + b.height;
         return box;
      }

2.函数重载:
同一个作用域内,可以声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同

class printData
{
   public:
      void print(int i) {
        cout << "整数为: " << i << endl;
      }
      void print(double  f) {
        cout << "浮点数为: " << f << endl;
      } 
      void print(char c[]) {
        cout << "字符串为: " << c << endl;
      }
};//print()函数重载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值