zoukankan      html  css  js  c++  java
  • C++语法学习记录

    1 class

    C++是一种面向对象的编程语言,需要创建一个个对象,也就是类。

    如下程序所示,创建了一个体积类(volume),类包括长宽高。

    而A是体积类的一个实例。

    #include <iostream>
    using namespace std;
    
    class volume  //创建类的格式:class 类的名称
    {
    public:     //确定类的成员属性,如果没有定义,默认为私有的。
        int length;
        int width;
        int height;
    };        //注意这里有一个分号
    
    void main()
    {
        volume A;
        A.length = 1;
        A.width = 2;
        A.height = 3;
        cout << "length = " << A.length << endl;
    }

    2 public与private

    在定义一个类时,在类里需要定义变量与函数,在定义前需要说明属性,通过public、private、protected三个关键字申明。

    如下程序所示,将public该为private,进行编译。

    #include <iostream>
    using namespace std;
    
    class volume
    {
    private:
        int length;
        int width;
        int height;
    };
    
    void main()
    {
        volume A;
        A.length = 1;
        A.width = 2;
        A.height = 3;
        cout << "length = " << A.length << endl;
    }

    在编译过程中,程序报错,如下图所示。

    error C2248: 'length' : cannot access private member declared in class 'volume'

    私有成员不能直接使用成员访问符(.)来访问。

    3 using namespace std;

    在学习C++时,教材上的每一个例程都包含如下语句:

    using namespace std;

    这里namespace为命名空间关键字,std为一个命名空间,添加这条语句后,使用cout、cin输入输出语句比较方便。

    当把这条语句注释后,进行编译。

    #include <iostream>
    //using namespace std;
    
    class volume
    {
    public:
        int length;
        int width;
        int height;
    };
    
    void main()
    {
        volume A;
        A.length = 1;
        A.width = 2;
        A.height = 3;
        cout << "length = " << A.length << endl;
    }

    在编译过程中,程序报错,提示如下:

    error C2065: 'cout' : undeclared identifier
    error C2065: 'endl' : undeclared identifier

    cout与endl是没有说明的关键字。解决的方法是在cout与endl前加上相应的命名空间,如下所示。

    std::cout << "length = " << A.length << std::endl;

    为了简便,直接在程序开头加上如下语句即可。

    using namespace std;

    4 cout与cin

    cin是输入语句,与 >> 配合使用,如下所示。

    volume A;
    cin >> A.length;

    cout是输出语句,与 << 配合使用,如下所示。

    cout << "length = " << A.length << endl;

    其中endl是换行的意思。

    5 int main(int argc, char* argv[])

    char* argbv[]形参解析:

    首先类型为一个指针,指向字符的指针;

    然后变量不是一个,而是一个数组,数组里存放的都是指向字符的指针。

    如下是一个测试程序:

    #include <iostream>
    using namespace std;
    
    void test(char* argv[])
    {
        char A[]= "hello";
        char B[] = "world";
        argv[0] = A;    //数组名相当于一个指针
        argv[1] = B;
        cout << (argv[0]) << endl;
        cout << (argv[1]) << endl;
    }
    
    void main()
    {
        char * c[2];
        test(c);
    }

    输出结果如下:

    hello
    world
    Press any key to continue

    6 string的用法

    定义string的语句如下。

    string sNew;

    在使用如下语句时,运行程序显示报错,内存溢出。

        while(s[i] != '')
        {
            if(s[i] == ' ')
            {
                sNew[count++] = '%';
                sNew[count++] = '2';
                sNew[count++] = '0';
            }
            else
            {
                sNew[count++] = s[i];
            }
            i++;
        }

    程序进行如下修改,可通过编译。可以看出在C++中,字符串可直接进行相加。

        while(s[i] != '')
        {
            if(s[i] == ' ')
            {
                sNew += "%20";
            }
            else
            {
                sNew += s[i];
            }
            i++;
        }

    疑问:定义一个string类型后,内存分配的空间有多大?

    为什么第一段程序会报错?

    7 结构体创建

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    //创建一个结点
    TreeNode* root_node;
    root_node = (struct TreeNode*)malloc(sizeof(struct TreeNode));//需要开辟空间
    root_node = (struct TreeNode*)malloc(sizeof(struct TreeNode*));//这样开辟会报错

    疑问:什么时候要用struct关键字,什么时候不需要?

    8 科学计数法

    100可以用1e2表示

    103可以用1e2+3表示

    9 取模

    题目的要求为:“答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。”

    取模的意思就是如果n大于1e9+7,n = n - 1e9+7。代码可以这么写:

    n = n % (1e9 + 7);

    实际测试这么取余好像有问题,报错如下。

    Line 26: Char 18: fatal error: invalid operands to binary expression ('int' and 'double')
                temp %= 1e9+7;

    找到报错的原因:不要用科学计数法,直接用1000000007。

    n = n % 1000000007;

    另外直接 n = n - 1000000007;不能达到取模的效果,因为n = 3 * 1000000007的时候,还是没能完整取模。

     

    参考

    面向过程和面向对象区别

    https://www.bilibili.com/video/BV11J41157TJ

    C++ 菜鸟教程

    https://www.runoob.com/cplusplus/cpp-classes-objects.html

    重学C++[Modern C++]:namespace 详解

    https://www.bilibili.com/video/BV1ZE41147mj?from=search&seid=15370591080568859981

  • 相关阅读:
    合并、媒体查询
    混入、命名空间(less)、继承
    函数(内置函数 和 自定义函数)
    运算、单位、转义、颜色
    选择器嵌套、伪类嵌套、属性嵌套(只在Sass中)
    注释、变量、插值、作用域
    二路归并排序java实现
    堆排序Java实现
    和为S的连续正数序列——牛客网(剑指offer)
    transient 与 volatile 笔记
  • 原文地址:https://www.cnblogs.com/QQ2962269558/p/12923785.html
Copyright © 2011-2022 走看看