C++基础学习笔记

简介: C++基础学习笔记

---- 当局部变量被定义时,系统不会对其初始化,您必须自行对其初始化。定义全局变量时,系统会自动初始化为下列值:


int - 0
char - '\0'
float - 0
double - 0
pointer - 'NULL'

---- 常量定义为大写字母形式


---- 使用 static 修饰局部变量可以在函数调用之间保持局部变量的值。当 static 修饰全局变量时,会使变量的作用域限制在声明它的文件内。当 static 用在类数据成员上时,会导致仅有一个该成员的副本被类的所有对象共享。


---- extern 是用来在另一个文件中声明一个全局变量或函数。常用于当有两个或多个文件共享相同的全局变量或函数的时候。


---- 函数的参数--形参:传值调用、(指针调用、引用调用:修改参数会影响原来的参数)


---- 对于有默认参数的函数,调用时如果未传递参数的值则会使用默认值,如果指定了值则会忽略默认值,使用传递的值。


---- 数组:存储一个固定大小的相同类型元素的顺序集合,连续的内存。


   申明数组:type arrayName [ arraySize ];


   初始化数组:


double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};
/*  balance 是一个指向 &balance[0] 的指针,即数组 balance 的第一个元素的地址。因此,下面的程序片段把 p 赋值为 balance 的第一个元素的地址 */
double *p;
double balance[10];
p = balance;
//  *(balance + 4) 是一种访问 balance[4] 数据的合法方式

     二维数组:


int a[3][4] = {  
 {0, 1, 2, 3} ,   /*  初始化索引号为 0 的行 */
 {4, 5, 6, 7} ,   /*  初始化索引号为 1 的行 */
 {8, 9, 10, 11}   /*  初始化索引号为 2 的行 */
};
//  内部嵌套的括号是可选的,下面的初始化与上面是等同的:
int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};

    数组作为函数参数


double getAverage(int arr[], int size)
{
  int    i, sum = 0;       
  double avg;          
  for (i = 0; i < size; ++i)
  {
    sum += arr[i];
   }
  avg = double(sum) / size;
  return avg;
}
......
// 调用
int balance[5] = {1000, 2, 3, 17, 50};
double avg;
// 传递一个指向数组的指针作为参数
avg = getAverage( balance, 5 ) ;
      数组作为函数的返回值
// 要生成和返回随机数的函数
int * getRandom( )
{
  static int  r[10];
  // 设置种子
  srand( (unsigned)time( NULL ) );
  for (int i = 0; i < 10; ++i)
  {
    r[i] = rand();
    cout << r[i] << endl;
  }
  return r;
}
...
int *p;
p=getRandom();
----  字符串
       C风格字符串:char
char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
//等同于
char greeing[] = "Hello";

     C++中的string类:string

---- 指针:动态分配内存。每一个变量的地址可以通过&运算符获得。


---- 引用:  


void swap(int& x, int& y)
{
   int temp;
   temp = x; /* 保存地址 x 的值 */
   x = y;    /* 把 y 赋值给 x */
   y = temp; /* 把 x 赋值给 y  */
   return;
}
......
int a;
int b;
swap(a,b);

----数据结构用户自定义的可用的数据类型,它允许存储不同类型的数据项,用.访问成员。


// 声明一个结构体类型 Books 
struct Books
{
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
};

cout << "书标题 : " << book.title <<endl;

    指向结构的指针:


struct Books *struct_pointer; 
// 在指针变量中存储结构变量的地址
struct_pointer = &Book1;
// 使用->访问成员
struct_pointer->title;

 


// 该函数以结构指针作为参数
void printBook( struct Books *book )
{
   cout << "书标题  : " << book->title <<endl;
   cout << "书作者 : " << book->author <<endl;
   cout << "书类目 : " << book->subject <<endl;
   cout << "书 ID : " << book->book_id <<endl;
}
......
Books Book1;
strcpy(Book1.title,"C++教程");
printBook(&Book1);

 ----- 类的成员函数:把那些定义和原型卸载类内部的函数,像类中其他变量一样,是类的成员,可以操作类的任意对象,可以访问类中的所有成员。成员函数可以定义在类定义内部,或者单独使用范围解析运算符 :: 来定义。


#include <iostream>
using namespace std;
class Box
{
   public:
      double length;         // 长度
      double breadth;        // 宽度
      double height;         // 高度
      // 成员函数声明
      double getVolume(void);
      void setLength( double len );
      void setBreadth( double bre );
      void setHeight( double hei );
};
// 成员函数定义
double Box::getVolume(void)
{
    return length * breadth * height;
}
void Box::setLength( double len )
{
    length = len;
}
void Box::setBreadth( double bre )
{
    breadth = bre;
}
void Box::setHeight( double hei )
{
    height = hei;
}
// 程序的主函数
int main( )
{
   Box Box1;                // 声明 Box1,类型为 Box
   double volume = 0.0;     // 用于存储体积
   // box 1 详述
   Box1.setLength(6.0); 
   Box1.setBreadth(7.0); 
   Box1.setHeight(5.0);
   // box 1 的体积
   volume = Box1.getVolume();
   cout << "Box1 的体积:" << volume <<endl;
}

   类的继承:https://www.runoob.com/cplusplus/cpp-inheritance.html


---- C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。 virtual修饰符则强调父类的成员函数可以在子类中被重写.


----- 数据抽象是指,只向外界提供关键信息,并隐藏其后台的实现细节,即只表现必要的信息而不呈现细节。所以在设计组件时,必须保持接口独立于实现。数据封装是一种把数据和操作数据的函数捆绑在一起的机制,数据抽象是一种仅向用户暴露接口而把具体的实现细节隐藏起来的机制。


----  在函数内部申明的所有变量都将占用栈内存,堆:在程序中未使用的内存,在程序运行时可用于动态分配内存。


    数组的动态分配内存


#include <iostream>
using namespace std;
int main()
{   
    int i,j,k;   // p[2][3][4]
    int ***p;
    p = new int **[2]; 
    for(i=0; i<2; i++) 
    { 
        p[i]=new int *[3]; 
        for(j=0; j<3; j++) 
            p[i][j]=new int[4]; 
    }
    //输出 p[i][j][k] 三维数据
    for(i=0; i<2; i++)   
    {
        for(j=0; j<3; j++)   
        { 
            for(k=0;k<4;k++)
            { 
                p[i][j][k]=i+j+k;
                cout<<p[i][j][k]<<" ";
            }
            cout<<endl;
        }
        cout<<endl;
    }
    // 释放内存
    for(i=0; i<2; i++) 
    {
        for(j=0; j<3; j++) 
        {   
            delete [] p[i][j];   
        }   
    }       
    for(i=0; i<2; i++)   
    {       
        delete [] p[i];   
    }   
    delete [] p;  
    return 0;
}

--------------------------待续----------------------  


相关文章
|
4月前
|
C++
c++学习笔记07 结构体
C++结构体的详细学习笔记07,涵盖了结构体的定义、使用、数组、指针、嵌套、与函数的交互以及在结构体中使用const的示例和解释。
42 0
|
3月前
|
安全 C语言 C++
C++学习笔记
C++学习笔记
|
4月前
|
C++
c++学习笔记02 运算符
C++学习笔记,介绍了C++中的运算符,包括基本的加减乘除、求模、前后置递增递减、赋值运算符、比较运算符和逻辑运算符的使用及其注意事项。
47 6
|
4月前
|
C++
c++学习笔记01 基本知识与数据类型
C++学习笔记,涵盖了C++中的常量定义、数据类型、变量内存大小计算、基本数据类型(整型、实型、字符型、字符串型、布尔型)以及转义字符的使用。
48 4
|
4月前
|
算法 C++
c++学习笔记04 数组
这篇文章是C++学习笔记4,主题是数组。
49 4
|
4月前
|
C++
【学习笔记】【C/C++】 c++字面值常量
【学习笔记】【C/C++】 c++字面值常量
46 1
|
4月前
|
存储 C++
c++学习笔记05 函数
C++函数使用的详细学习笔记05,包括函数的基本格式、值传递、函数声明、以及如何在不同文件中组织函数代码的示例和技巧。
39 0
c++学习笔记05 函数
|
4月前
|
编译器 C++
【C/C++学习笔记】C++声明与定义以及头文件与源文件的用途
【C/C++学习笔记】C++声明与定义以及头文件与源文件的用途
63 0
|
4月前
|
存储 C++
【C/C++学习笔记】string 类型的输入操作符和 getline 函数分别如何处理空白字符
【C/C++学习笔记】string 类型的输入操作符和 getline 函数分别如何处理空白字符
55 0
|
4月前
|
C++
c++学习笔记09 引用
C++引用的详细学习笔记,解释了引用的概念、语法、使用注意事项以及引用与变量的关系。
45 0