C++ 学习 . >> :: -> this

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 成员函数中使用
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值