C++学习之第一个程序(在学过C后的基础上)

(一)编写前需要知道的小知识点

C语言一些可编译通过而c++不可以:

#include <stdio.h>

//返回值默认为int型
//参数列表默认,瞎传也没事
func(){
	printf("test\n");
}

int a;
int a;

int b = 1;  //定义,编译通过
int b;		//声明,类似函数的声明,写多少次都无所谓,编译通过

//以下两条编译不通过,两次定义,重定义
//int c = 1;  
//int c = 1;

int main(void){
	func();
	func(123,"123", 1.23);
	return 0;
}
  1. C++编译gcc xx.cpp -lstdc++ 或 g++ xx.cpp
  2. C++源文件扩展名
    1).cpp //推荐
    2).cc
    3).cxx
    4).C
  3. 头文件
    #include
    1)C++中所有和I/O相关的类型、对象、函数都在该头文件中
    2)C++中多数头文件没有".h"后缀
    3)C++开发中也可以使用标准C库的头文件,同时提供一套不带".h"替换版本
    #include <stdio.h> <==> #include
    #include <stdlib.h> <==> #include
    #include <string.h> <==> #include
  4. 标准输入输出
    1)使用cin对象表示表示标准输入//类似scanf
    	int a = 0;
    	scanf("%d",&a);//C语言
    	cin >> a;//C++语言
    	注:“>>”成为输入操作符
    	int i = 0,double d = 0.0;
    	scanf("%d%lf",&a,&d);//C
    	cin >> a >> d;//C++
    
    2)使用cout对象表示标准输出//类似printf()
    	int a = 123;
    	printf("%d\n",a);//C语言
    	cout << a << endl;//C++语言:<<”被称为输出操作符
    	int i = 100,double d = 2.34;
    	printf("%d,%lf\n",i,d);//C语言
    	cout << i << ',' << d << endl;//C++语言
    

(二) 名字空间(命名空间)

  1. 名字空间作用
    1)避免名字冲突
    2)划分逻辑单元

  2. 定义名字空间

    	namespace 名字空间名{
    		名字空间成员1;
    		名字空间成员2;
    		...
    	}
    

    注:名字空间的成员可以是全局变量、全局函数、类型、名字空间.

  3. 名字空间成员的使用
    1)通过作用域限定符号“::”访问
    名字空间名::要访问的成员;
    eg:“std::cout”,访问std标准名字空间里面的输出流对象cout
     
    2)名字空间指令
    using namespace 名字空间名;
    注:在该条指令以后的代码中,指定名字空间的成员都可见,可以直接访问,省略"名字空间名::"
     
    3)名字空间声明
    using 名字空间名::要访问的成员;
    注:将名字中的特定成员引入到当前声明的作用域中,在该作用域访问这个成员,就如同访问自己的成员一样(如果和名字空间指令产生了冲突,不会认为是歧义,优先名字空间声明),可以直接访问,省略"名字空间名::"

  4. 全局作用域和无名名字空间
    1)没有放在任何名字中的成员,属于全局作用域,可以直接访问,但如果和局部作用域的成员一样,将优选访问局部作用域的,这时如果还希望访问全局作用域的成员,可以通过"::xx"显式指明
    2)定义名字空间时可以没有名字,即为无名名字空间(匿名空间),无名空间的成员全局作用域成员类似,只是被限制在当前文件中使用。

  5. 名字空间嵌套

    namespace ns1{
    	int num = 100;
    	namespace ns2{
    		int num = 200;
    		namespace ns3{
    			int num = 300;
    		}
    	}
    }
    cout << ns1::num << endl;//100
    cout << ns1::ns2::num << endl;//200
    cout << ns1::ns2::ns3::num << endl;//300
    
  6. 名字空间合并
    //1.cpp
    namespace ns{
    void func1(void){…}
    }
    //2.cpp
    namespace ns{//自动和1.cpp的合并到一起
    void func2(void){…}
    }
     
    namespace.cpp

    #include <iostream>
    using namespace std;//标准名字空间指令
    namespace ns1{
        void func(void){
            cout << "ns1的func" << endl;
        }
        int num = 100;
    }
    namespace ns2{
        void func(void){
            cout << "ns2的func" << endl;
        }
        int num = 200;
    }
    //int num = 300;//全局作用域
    namespace{//无名名字空间
        int num = 300;
    }
    int main(void){
    /*
        using ns1::func;//名字空间声明
        func();//ns1的func
        //using ns2::func;
        //func();//歧义错误
        
        using namespace ns2;//名字空间指令
        func();//ns1的func,局部优先
        ns2::func();//ns2的func
    */
        cout << num << endl;//300
        using ns1::num;//名字空间声明
        cout << num << endl;//100,局部优先
        cout << ns2::num << endl;//200
        cout << ::num << endl;//300
    
        return 0;
    }
    

(三) C++的结构体、联合体和枚举

  1. C++结构体
    1)当定义结构体变量时可以省略struct关键字
    2)结构体里可以定义函数,成为成员函数(方法),在成员函数里面可以直接访问结构体中的其它成员。
  1. struct 成员默认是public
  1. C++联合体
    1)当定义联合体变量时可以省略union关键字
    2)支持匿名联合
  2. 枚举
    1)定义枚举变量时可以省略enum关键字
    2)C++中枚举被看作是独立数据类型,不能把枚举变量当做int变量使用
     
    struct.cpp
    #include <iostream>
    using namespace std;//标准名字空间指令
    struct Teacher{
        //成员变量
        char name[20];
        int age;
        double sal;
        //成员函数
        void print(void){
            cout << "姓名:" << name << ",年龄:" <<
                age << ",工资是:" << sal << endl;
        }
    };
    int main(void){
        /*struct*/Teacher wangjl={"王建立",45,800.5};
        wangjl.print();
        Teacher* pt = &wangjl;
        pt->print();
        return 0;
    }
    
    union.cpp
    #include <iostream>
    using namespace std;
    int main(void){
        union{//匿名联合
            unsigned int ui;
            unsigned char uc[4];
        };
        ui = 0x12345678;
        for(int i=0;i<4;i++){
            //hex:以十六进制方式打印
            //showbase:显示进制标识
            cout << hex << showbase << (int)uc[i]
                << ' ';
        }
        cout << endl;
        return 0;
    }
    

(四) 字符串

  1. 回顾C语言中字符串
    1)字面常量字符串: “hello”
    2)字符指针: char*
    3)字符数组:char[]

  2. C++中兼容C语言的字符串,另外还增加了一个string类型,专门表示字符串:
    1)定义字符串
    string s;//定义空字符串
    string s = “hello”;//定义同时初始化
     
    //和上面写法结果等价
    string s(“hello”);
    string s = string(“hello”);
    2)字符串拷贝:=
    string s1 = “hello”;
    string s2 = “world”;
    s1 = s2;//拷贝构造,等价s1=string(s2);
    cout << s1 << endl;//“world”
    3)字符串连接:+ +=
    string s1 = “hello”;
    string s2 = “world”;
    string s3 = s1 + s2;//连接
    cout << s3 << endl;//“helloworld”
    4)字符串比较:== != > < >= <=
    if(s1 == s2){…}
    if(s1 != s2){…}
    5)随机访问:[]
    string s = “helloworld”;
    s[0] = ‘H’;
    s[5] = ‘W’;
    cout << s <<endl;//“HelloWorld”
    6)常用的成员函数
    size()/length();//获取字符串长度
    c_str();//返回C风格的字符串(const char*)
    string s = “hello”;
    cout << s.size() << endl;//5
    cout << s.length() << endl;//5
    string cpp_s = “abc”;
    const char* c_s = “def”;
    cpp_s = c_s;//ok
    c_s = cpp_s;//error
    c_s = cpp_s.c_str();//ok

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值