鱼C论坛

 找回密码
 立即注册
查看: 2209|回复: 0

[技术交流] c++快速入门

[复制链接]
发表于 2017-7-7 10:32:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
001
1.oo思想的特点
   封装
   封装意味着把对象的属性和方法结合成一个整体的过程。
   抽象
   把具体问题概括的过程 ,本质表达清楚。
   继承
   子类对象拥有与基类相同的全部属性和方法
   多态
   继承后有自己的特点。
002
1.对一个整型数组求和

我的答案

给的参考答案

结果是:data:40
Array:4
结果是:45
原因:array传给形参的是数组首元素的地址,只有4个字节的长度

还可以这么实现
来看一下c++的程序

cout是一个输出流对象,它是console out (控制台输出)的缩写,是属于basic_ostream类的对象,ostream类在iostream头文件中定义

输出流:例如:数据可以从键盘流入程序,也可以从程序流向屏幕,打印机等。

using namespace std;
名字空间;c++标准库所使用的所有标识符(即类,函数,对象的名称)都是在同一特殊的名字空间(std)来定义

如果我们没有使用这条指令,我们将需要使用std::cout这样的语法来调用输出流对象.

<<是流操作符
c++的一个特点:支持重载,重载事实上就是允许我们按照不同的方式使用同一个操作符

Cin>>i;cin输入操作符又称为提取操作符,它一次从输入流对象cin提取一个整数。
当用户进行键盘输入时,对应的字符将输入到操作系统的键盘缓冲区中,这样,当用户点击键盘缓冲区的内容传输到cin流的内部缓冲区,“>>”操作符随后从这个缓冲区提取需要的信息
如果用户不进行键盘的输入,程序将会阻塞,这是阻塞性io的例子。
>>最初定义为右键操作符,它在c++中进行了重载,当它按照这里所示的方式使用时,它就用于从输入流对象提取int,float,double型数据,也可以提取字符串等数据。

C和c++事实上在声明变量的事实上有点不同,c++允许我们在程序的任意位置声明变量,可以在实际需要的时候使用变量的时候才来声明他们。

cin.ignore()的使用
cin.ignore(a,ch)方法是从输入流(cin)中提取字符,提取的字符被忽略(ignore),不被使用。
每抛弃一个字符,它都要计数和比较字符:如果计数值达到a或者被抛弃的字符是ch,则cin.ignore()函数执行终止;否则,它继续等待。
它的一个常用功能就是用来清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响。
比如可以这么用:cin.ignore(1024,'\n')
(通常用作cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');)
通常把第一个参数设置得足够大,这样实际上总是只有第二个参数’\n’起作用,所以这一句就是把回车(包括回车)之前的所以字符从输入缓冲(流)中清除出去。
________________________________________
程序实例:
#include <iostream>
using namespace std;
void main()
{
    int a,b,c;
    cout<<"input a:";
    cin>>a;
    cin.ignore(1024, '\n');
    cout<<"input b:";
    cin>>b;
    cin.ignore(1024, '\n');
    cout<<"input c:";
    cin>>c;
    cout<<a<<"\t"<<b<<"\t"<<c<<endl;
}
&#8226;        1
如果没有cin.ignore(),可以一次输入3个数,用空格隔开就好了。。可是非常不美观。。这样才是我们想要的。
如果cin.ignore()不给参数,则默认参数为cin.ignore(1,EOF),即把EOF前的1个字符清掉,没有遇到EOF就清掉一个字符然后结束,会导致不正确的结果,因为EOF是文件结束标识。
下面一段代码:
#include<iostream>  
using   namespace   std;  
void main()  
{  
    char   str1[30],str2[30],str3[30];  
    cout  <<    "请输入你的姓名:";  
    cin>>str1;  
    cout<<"请输入你的住址:";  
    cin.ignore();  
    cin.getline(str2,30,'a');  
    cout  <<    "请输入你的籍贯:";  
    cin.ignore();  
    cin.getline(str3,30);  
    cout<<str3;  
}  
&#8226;        1
如果在地址那里输入bcdabcd那么此时流里面剩的是bcd\n,此时cin.ignore();吃掉的就是b了,这是流里还剩下cd\n直接交给cin.getline(str3,30);应为有个\n所以这里getline就直接返回 。
以上转自:http://blog.sina.com.cn/s/blog_868a5fbd0100vz9l.html 稍作修改
________________________________________
输入整型数据的容错处理实例
源码如下:
/***********************/
// @file    ioStatus.cc
// @author  lesliefish(yuleics@outlook.com)
// @date    2016-03-02 10:35:08
/***********************/

#include <iostream>
#include <string>
#include <limits>

using std::cout;
using std::endl;
using std::cin;
//打印流的状态
void printCin()
{
    cout << "bad = " << cin.bad() << endl;
    cout << "fail = " << cin.fail() << endl;
    cout << "eof = " << cin.eof() << endl;
    cout << "good = " << cin.good() << endl;
}

int main(void)
{
    int inum;
    printCin();
    //输入的容错处理
    while(cin >> inum, !cin.eof())
    {
        if(cin.bad())
        {
            cout << "IO stream corrupted" << endl;
        }else if(cin.fail())
        {
            cout << "输入不合法,请重试" << endl;
            cin.clear();
            //跳过部分输入,直到输入一个回车符
            cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
            continue;
        }
        cout << "inum = " << inum << endl;
    }

    //printCin();
    return 0;
}
&#8226;        1
执行结果如下图:


cin.getline函数的作用
此函数是按行读取,其语法为:cin.getline(字符指针,字符个数N,结束符);
功能是:一次读取多个字符(包括空白字符),直到读满N-1个,或者遇到指定的结束符为止(默认的是以'\n'结束)。
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int i;
char a[10];
cin.getline(a,10);
for(int i=0;i<10;i++)
cout<<a<<" ";
    return 0;
}
输入:1234567890123
输出:1 2 3 4 5 6 7 8 9 _ (第10位存放字符串结束符'\0')
cin.get()
用法1: cin.get(字符变量名)可以用来接收字符
#include &lt;iostream>
using namespace std;
main ()
{
char ch;
ch=cin.get();               //或者cin.get(ch);
cout<&lt;ch&lt;&lt;endl;
}
输入:jljkljkl
输出:j
用法2:cin.get(字符数组名,接收字符数目)用来接收一行字符串,可以接收空格
#include &lt;iostream>
using namespace std;
main ()
{
char a[20];
cin.get(a,20);
cout<&lt;a&lt;&lt;endl;
}
输入:jkl jkl jkl
输出:jkl jkl jkl
输入:abcdeabcdeabcdeabcdeabcde (输入25个字符)
输出:abcdeabcdeabcdeabcd              (接收19个字符+1个'"0')
用法3:cin.get(无参数)没有参数主要是用于舍弃输入流中的不需要的字符,或者舍弃回车,弥补cin.get(字符数组名,接收字符数目)的不足.
Cin.peek(挑选循环内的内容)
该调用形式为cin.peek() 其返回值是一个char型的字符,其返回值是指针指向的当前字符,但它只是观测,指针仍停留在当前位置,并不后移。如果要访问的字符是文件结束符,则函数值是EOF(-1)。
其功能是从输入流中读取一个字符 但该字符并未从输入流中删除
若把输入流比作一个 栈类 那么这里的peek函数就相当于栈的成员函数front 而如果cin.get()则相当于栈的成员函数pop。
下面这段代码能帮助您更清晰地理解peek函数
/ istream peek
#include <iostream>
using namespace std;
int main () {
char c;
int n;
char str[256];
cout << "Enter a number or a word: ";
c=cin.peek();
if ( (c >= '0') && (c <= '9') )
{
cin >> n;
cout << "You have entered number " << n << endl;
}
else
{
cin >> str;
cout << " You have entered word " << str << endl;
}
return 0;
}
gcount
gcount() 方法返回最后一个非格式化的抽取方法读取的字符数。这意味着字符由get(),getline()、ignore()、或read()方法读取的,不是由抽取操作符( >> )读取的,抽取操作符对输入进行格式化,使之与特定的数据类型匹配
example:
#include <iostream>
using namespace std;
int main( )
{
cout << "Type the letter 'a': ";
ws( cin );
char c[10];
cin.get( &c[0],9 );
cout << c << endl;
cout << cin.gcount( ) << endl;
}
输入
a
输出
a
1

Cin.read
接收指定数目的字符到数组中(可读入空白符),提前结束的话输入文件结束符

如果要向屏幕输入一串有空格的字符串,如I LOVE YOU,用cin的话就只会输进去I原因是空格影响输入,只要用一个std::getline(cin>>i love you,数组名);就可以搞定





评分

参与人数 1鱼币 +3 收起 理由
小甲鱼 + 3 支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 15:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表