{C++系列} 标准C++ day01 C++概述,标准输入输出,名字空间,C++结构体,枚举,联合,字符串
in C/C++ with 1 comment

{C++系列} 标准C++ day01 C++概述,标准输入输出,名字空间,C++结构体,枚举,联合,字符串

in C/C++ with 1 comment

《C++程序设计原理与实践》
《C++ Primer》


#C++概述

1 历史背景

2)C++之父:Bjarne Stroustrup(1950-今)

3)C++发展过程

2 应用领域

3 C和C++

#第一个C++程序

1 编译方式

1)gcc xx.cpp -lstdc++
2)g++ xx.cpp //推荐

举例

第一个C++程序

#include <iostream>
#include <cstdio>

int main(void)
{
    std::cout << "hello world!" << std::endl;
    printf("hello wrold!\n");
    return 0;
}

2 C++源文件的扩展名

3 头文件

#include <iostream>
#include <stdio.h> ==>#include <cstdio>

4 标准输入输出

1)cin对象表示标准输入

int a;
   //scanf("%d",&a);
   cin >> a;
   ">>" : 提取运算符  

 int a,b;
   //scanf("%d%d",&a,&b);
   cin >> a >> b;

2)cout对象表示标准输出

  int a = 123;
   //printf("%d\n",a);
   cout << a << endl;//123
   "<<":插入运算符

-----------------

   //printf("a=%d\n",a);
   cout << "a=" << a << endl;

-----------------

   int a = 100,b = 200;
   //printf("%d,%d\n",a,b);
   cout << a << ',' << b << endl;

5 std:: 表示标准名字空间

#名字空间(namespace)

名字空间作用

定义名字空间

namespace 名字空间名{
   名字空间成员1;
   名字空间成员2;
   ...
}  
注:名字空间成员可以是全局变量、函数、类型、名字空间。
eg:
namespace ns1{
   int x = 123;
   void func(void){...}
   struct Student{...};
   namespace ns2{...} 
}

名字空间成员的使用

1)通过作用域限定运算符"::"

名字空间名::要访问的成员;

eg:
namespace ns1{
   int x = 123;
   void func(void){...}
}
int main(void)
{
   ns1::x = 321;
   ns1::func();    
}

名字空间指令

` using namespace 名字空间名;`
 在该条指令以后的代码,指定名字空间的成员都可见,访问时可以省略作用域限定。
 

名字空间声明

using 名字空间名::名字空间成员;
将名字空间中的特定成员引入当前作用域,在该作用域中访问这个成员就如同访问局部变量一样,可以省略作用域限定。

eg:
namespace ns1{
   int x = 123;
   void func(void){...}
}
int main(void)
{
   using ns1::x;//名字空间声明
   x = 321;//ok
   func();//error
}

无名名字空间//了解

不属于任何名字空间的成员,将被编译器自动放到无名名字空间中。
::成员;

名字空间嵌套//了解

eg:
  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

举例

命名空间举例

#include <iostream>
using namespace std;//以后可以省略std::
namespace ns1{
    int num = 100;
    void func(void){
        cout << "ns1::func" << endl;
    }
}
namespace ns2{
    void func(void){
        cout << "ns2::func" << endl;
    }
}
int num = 200;//将被放入无名名字空间中

int main(void)
{
/*
    using ns1::func;//名字空间声明
    func();//ns1::func
    //using ns2::func;
    //func();//error
    using namespace ns2;//名字空间指令
    func();//ns1::func局部优先
    ns2::func();
*/
    using ns1::num;
    cout << num << endl;//100
    cout << ::num << endl;//200
    return 0;
}

#C++结构体、联合体、枚举

结构体

举例

C++中的结构体

#include <iostream>
using namespace std;

struct Student{
    //成员变量
    char name[20];
    int age;
    //成员函数
    void who(void){
        cout << "我叫" << name << ",今年" << age
            << "岁" << endl;
    }
};
int main(void)
{
    /*struct*/ Student s = {"张飞",28};
    s.who();
    return 0;
}

联合体//了解

举例

C++中的联合体

#include <iostream>
#include <cstdio>
using namespace std;

int main(void)
{
    union{//匿名联合
        unsigned int un;
        unsigned char uc[4];
    };
    un = 0x12345678;
    for(int i=0;i<4;i++){
        printf("%#x\n",uc[i]);
    }
    return 0;
}

枚举

eg:
/*enum*/ STATE s;
s = 100;//C:ok,C++:error

举例

C++中的枚举

#include <iostream>
using namespace std;

int main(void)
{
    enum Color{RED,GREEN,BLUE=100,YELLOW};
    /*enum*/ Color c;
    //c = 100;//C:ok,C++:error
    c = BLUE;//C:ok,C++:ok
    cout << c << endl;//100
    return 0;
}

#字符串

回顾C中字符串

eg:
   char arr[] = "hello";
   char* p = "world";
   ------------------------
   strcpy(p,arr);//段错误
   strcpy(arr,p);//ok
   ------------------------
   strcpy(arr,"jiangguiliang");
   cout << arr << endl;//危险,数据越界
   -------------------------
   char* p2 = arr;
   //arr:char* const arr
   arr = "abcd";//编译报错
   --------------------------

C++兼容C字符串的同时,增加了string类型,专门表示字符串。

定义字符串

string s;//定义空字符串
string s = "hello";//定义同时初始化
//下面两种写法和上面等价
string s("hello");
string s = string("hello");

字符串基本操作

-->字符串连接 + +=

eg:
   string s = "hello";
   //s = s + " world!"
   s += " world!";
   cout << s << endl;//"hello world"

-->字符串拷贝 =

   string s = "hello world!";
   string s2;
   s2 = s;//拷贝

-->字符串比较 == != < <= > >=

  string s1 = "abcdefg";
  string s2 = "hello";
  if(s1 > s2)
        cout << "s1>s2" << endl;
  else
        cout << "s1<s2" << endl;//ok

-->获取一个字符串中某个字符 []

  string s = "hello";
  s[0] = 'H';
  cout << s << endl;//"Hello"  

string暂时可以理解为是一个结构体类型,里面常用的成员函数:

size():获取一个字符串的长度
length():和size()等价
c_str():转化为C风格的字符串

eg:
  string s = "hello";
  cout << s.size() << endl;//5 
  char* p = s.c_str();

举例

C++基本操作

#include <iostream>
#include <cstring>//和string.h等价
using namespace std;

int main(void)
{
    string s = "hello";
    cout << s << endl;//hello
    //字符串连接
    s += " world!";
    cout << s << endl;//hello world!
    //字符串拷贝
    string s2;
    s2 = s;
    cout << s2 << endl;//hello world!
    //字符串比较
    cout << (s == s2) << endl;//1
    cout << (s > s2) << endl;//0
    cout << (s <= s2) << endl;//1
    //获取字符串中某个字符
    s[0] = 'H';
    s[6] = 'W';
    cout << s << endl;//Hello World!
    //获取字符串的长度
    cout << s.size() << endl;//12
    cout << s.length() << endl;//12
    //c_str():转化为C风格字符串
    cout << strlen(s.c_str()) << endl;//12

    return 0;
}


#练习:

使用string类型,从键盘读取一个字符串并保存,统计有几个字母"A/a";
string s;
cin >> s;//从键盘读取一个字符串,空白符结束
getline(cin,s);//回车结束

#include <iostream>
using namespace std;

int main(void)
{
    string str;
    int count = 0;
    cout << "请输入一个字符串:" << endl;
    //cin >> str;
    getline(cin,str);
    for(int i=0; i<str.size(); i++){
        if(str[i] == 'A' || str[i] == 'a'){
            ++count;
        }
    }
    cout << "A(a)的个数为:" << count << endl;
    return 0;
}

Responses
  1. Reply