C++的 >> 输入流
>>是自动读取字符串流内容的符号。
每读完一个符合条件的字符串、整数类型(以空格隔开),之后会自动后移。cin 是指从电脑键盘输入的内容将会以字符串流形式自动导入 cin(即键盘输入内容后,cin 就成为一个“字符串流”了,存储的内容为从键盘输入的内容),而>>则负责读取字符串流的内容,匹配到正确的类型,返回1,否则返回0;用到while将会不断的读取字符串流。
下面直接上代码说明:
#include<iostream>
using namespace std;
int main()
{
int s;
//在键盘输入内容前,cin还没有用到,预定义的对象 cin 是 iostream 类的一个实例。cin 对象附属到标准输入设备,通常是 键盘。cin 是与流提取运算符 >> 结合使用的,
//输完内容之后才把内容以字符串流的形式传给cin流对象
//cin就变成字符串流,使用提取运算符 ">>" 从设备键盘取得数据,
//读取类型符合时,就把读取的数据赋值给s;
// endl 最后一个字符是字母“l”,而非阿拉伯数字“1”,它是“end of line”的缩写。
cin>>s;
cout<<endl;
cout<<s<<endl;
return 0;
}
只输入一个数时,cin自动读取内容,读取到空格的地方停止,然后判断读取的内容是否符合类型,这里的s为int类型,符合即把读取的内容赋值给s
"::"在C++中表示作用域,和所属关系。是各种域性质的实体(比如类(不是对象)、命名空间等)调用其成员专用的。
"::"是运算符中等级最高的,它分为三种,分别如下:
(如果有个局部变量与全局变量同名(假设都是int a;),默认调用的 a 是局部变量,如果要访问全局变量a,就要这么写“::a”。使用域作用符来加以区别;前面没写具体的域名,就是指默认域)
一、作用域符号:
作用域符号”::“的前面一般是类名称,后面一般是该类的成员名称,C++为例避免不同的类有名称相同的成员而采用作用域的方式进行区分。
例如:A,B表示两个类,在A,B中都有成员member。
那么:
1、A::member就表示类A中的成员member。
2、B::member就表示类B中的成员member。
二、全局作用域符号:
全局作用域符号:当全局变量在局部函数中与其中某个变量重名,那么就可以用::来区分,例如:
三、作用域分解运算符:
::是C++里的作用域分解运算符,“比如声明了一个类A,类A里声明了一个成员函数voidf(),但没有在类的声明里给出f的定义,那么在类外定义f时,就要写成voidA::f(),表示这个f()函数是类A的成员函数。例如:
->是指针指向其成员的运算符。->是指针的指向运算符,通常与结构体一起使用。 而 . 是结构体的成员运算符。
具体使用方法可以参考如下程序:
#include<stdio.h>
struct stu // 定义一个结构体
{
char name[10]; // 姓名
int num; // 学号
int age; // 年龄
};
void main()
{
struct stu *s; // 定义一个结构体指针
char str[]="ZhangLi";
s->name = str; // 对结构体中的成员变量name进行赋值
s->num = 2015120; // 对结构体中的成员变量num进行赋值
s->age = 18; // 对结构体中的成员变量age进行赋值
}
最大的区别是->前面放的是指针,而.前面跟的是结构体变量。
struct A
{
int a;
int b;
};
A *point = malloc(sizeof(struct A));
point->a = 1;
A object;
object.a = 1;
.是成员作用符,是对象专用的。例如:
struct A
{
int InnerPara;
static int StPara;
} a;
a访问时用“.”,如a.InnerPara(好比java中的实例变量 );A访问用“::”,如A::StPara(好比java中的类成员变量);
#include<iostream.h>
int Num=3;
class aa{
public :
void a1();
static void a2();
private:
static int id;
};
void aa::a1() //::可以实现在类体外定义其成员函数
{
cout<<"a1"<<endl;
}
void aa::a2()
{
cout<<id<<endl;
}
int aa::id=14; //::可以对静态成员赋值
void main()
{
aa a;
int Num=4;
//cout<<a::id<<endl; //::这样用不对
cout<<::Num<<endl; //::可以使用全局变量
cout<<Num<<endl;
a.a1(); //.对象调用类的函数
a.a2(); //包括静态的
aa::a2(); //::可访问静态成员函数
//aa::a1(); //::不能访问非静态的
}
cout 和 cin 都是 C++ 的内置对象,而不是关键字。C++ 库定义了大量的类(Class),程序员可以使用它们来创建对象,cout 和 cin 就分别是 ostream 和 istream 类的对象,只不过它们是由标准库的开发者提前创建好的,可以直接拿来使用。
C++中"\n"与endl的区别是什么?
"\n"表示内容为一个回车符的字符串。std::endl是流操作子,输出的作用和输出"\n"类似,但可能略有区别。
std::endl输出一个换行符,并立即刷新缓冲区。
例如,
std::cout << std::endl;
相当于
std::cout << '\n' << std::flush;,或者
std::cout << '\n'; std::fflush(stdout);。
由于流操作符operator<<的重载,对于'\n'和"\n",输出效果相同。
布尔值
C++中的布尔变量存储的就是0和非0,0即为false,非0即为true,你要输出true或者false只能自己判断布尔变量的真假,真则输出true,假则输出false,需要自己写语句,最简单的就是用boolalpha,例如
bool bTrue=1;
bool bFalse=0;
cout << boolalpha <<bTrue<< endl;
输出true
cout << boolalpha <<bFalse<< endl;
输出false
boolalpha记得要using namespace std;
strcmp 比较两个字符串
设这两个字符串为str1,str2,
若str1=str2,则返回零;
若str1<str2,则返回负数;
若str1>str2,则返回正数。
matlab中函数,strcmp(s1,s2) 判断两个字符串s1和s2是否相同,相同返回true ,不同返回false
#include <string.h>
#include <stdio.h>
int main(void)
{
char *buf1 = "aaa", *buf2 = "bbb", *buf3 = "ccc";
int ptr;
ptr = strcmp(buf2, buf1);
if (ptr > 0)
printf("buffer 2 is greater than buffer 1n");
else
printf("buffer 2 is less than buffer 1n");
ptr = strcmp(buf2, buf3);
if (ptr > 0)
printf("buffer 2 is greater than buffer 3n");
else
printf("buffer 2 is less than buffer 3n");
return 0;
this
this 是 C++ 中的一个关键字,也是一个 const 指针,它指向当前对象,通过它可以访问当前对象的所有成员(包括:private、protected、public 属性的)。
this 只能用在类的内部,this 是一个指针,要用->
来访问成员变量或成员函数。
this 虽然用在类的内部,但是只有在对象被创建以后才会给 this 赋值(与java不同,java在未创建对象前可以使用),并且这个赋值的过程是编译器自动完成的,不需要用户干预,用户也不能显式地给 this 赋值。
几点注意:
- this 是 const 指针,它的值是不能被修改的,一切企图修改该指针的操作,如赋值、递增、递减等都是不允许的。
- this 只能在成员函数内部使用,用在其他地方没有意义,也是非法的。
- 只有当对象被创建后 this 才有意义,因此不能在 static 成员函数中使用