C++笔记

约分

#include<iostream>
using namespace std;
class Fract
{
    int m_m;
    int m_z;
public:
     Fract(int z,int m)//没有返回值 (构造函数)
    {
        m_m=m;
        m_z=z;
    }
    Fract()//没有返回值 (构造函数)
    {
        m_m=100;
        m_z=10;
        cout<<"Fract construct"<<endl;
    }
    void set(int z,int m)
    {
        m_m=m;
        m_z=z;
    }
    void print()
    {
        redu();
        cout<<m_z<<"/"<<m_m<<endl;
    }
    void redu()
    {
        for(int i=m_m;i>0;i--)
        {
            if((m_m%i==0)&&(m_z%i==0))
            {
                m_m/=i;
                m_z/=i;
                break;
            }
        }
    }
};

int main()
{
    Fract f(10,20);
//  f.set(16,48);   
    f.print();
    Fract f1(30,5);
//  f1.set(16,48);  
    f1.print();
}
运行结果:
1/2
6/1

int main()
{
    
    //Fract f(10,20);
//  f.set(16,48);   
    //f.print();
    Fract f1[5];//构造类对象数组,只能调用无参数构造函数,调用了5次 

}
运行结果:
Fract construct
Fract construct
Fract construct
Fract construct
Fract construct

时钟

#include<stdio.h>
#include<iostream>
#include <stdlib.h>
//#include<unistd.h>
#include<windows.h>
using namespace std;

class Time
{
    int m_iHour;//小时 
    int m_iMinute;//分钟 
    int m_iSecond;//秒 
public:
    void set(int h,int m,int s)
    {
        m_iHour=h;
        m_iMinute=m;
        m_iSecond=s;
    }
    
    void show()
    {
        cout<<m_iHour<<":";
        cout<<m_iMinute<<":";
        cout<<m_iSecond<<endl;
    }
    void tick()
{

    Sleep(1000);
    m_iSecond++;
    if(m_iSecond==60)
    {
        m_iMinute++;
        m_iSecond=0;
        if(m_iMinute==60)
        {
            m_iHour++;
            m_iMinute=0;
            if(m_iHour==24)
            {
                m_iHour=0;
            }
        }
    }
}
    void run()//死循环 
    {
        while(1)
        {
            show();
            tick();
            system("Cls");//清屏 
        }
    }
};
int main(void)
{
    Time t;
    t.set(23,59,50);
    t.run();

    
}

时钟2

#include<iostream>
#include<windows.h>
using namespace std;
class Clock{
    public:
        Clock(short h=0,short m=0,short s=0):h(h),m(m),s(s){
        }
        void displayTime();
    private:
        short h;
        short m;
        short s;
};
void Clock::displayTime()
    {
        while(true)
        {
            cout<<h<<':'<<m<<':'<<s<<"   ";
            Sleep(1000);
            cout<<'\r'; 
            if(!(s=++s%60))
            if(!(m=++m%60))
                h=++h%24;
        }
} 
int main()
{
    Clock A(23,59,55);
    A.displayTime();
    return 0;
}


析构函数

#include<iostream>
using namespace std;
class A
{
    int m_a;
    public:
        A(int a)
        {
            m_a=a;
            cout<<"A construct"<<m_a<<endl; 
        }
        ~A()//析构函数 (有且只有一个) 
        {
            cout<<"~~~~~A"<<m_a<<endl;
        }
};

class Test
{
    A m_t1;
    A m_t2; 
    public:
        Test():m_t2(222),m_t1(111)//方法一:函数的初始化 (先输出m_t1,在输出m_t2)
        {
            cout<<"Test construct"<<endl;
        }
        ~Test()//析构函数 (有且只有一个) 
        {
            cout<<"~~~~~Test"<<endl;
        } 
};
int main()
{
    Test t;//先调A再调Test函数 
}

输出结果:
A construct111
A construct222
Test construct
~~~~~Test            //构造函数输出顺序正好相反
~~~~~A222
~~~~~A111


分配空间和释放空间

#include<iostream>
#include<malloc.h>
using namespace std;
class Test
{
    int *p;
    public:
        Test()
        {
            p=(int*)malloc(sizeof(int));
            *p=4;
            cout<<"Test construct"<<endl;
            
        }
        ~Test()//析构函数最后运行,释放空间 
        {
            free(p);
            p=NULL;
            cout<<"~~~~~Test"<<endl;
        }
        void print()
        {
            cout<<*p<<endl;
        }
};
int main()
{
    Test t;
    t.print();
    cout<<"===="<<endl;
    return 0;
}
运行结果:
Test construct
4
====
~~~~~Test

字符

#include<iostream>
using namespace std;
int main()
{
    string s;
    // string s("weiwei");
    //string s1(5,'a');
    //string s(s1);
    s="hello shangqian";//赋值 
    s+="sq1409";//追加、连接 
    s="hello";
    //s.clear;                     //清空
    cout<<"size="<<s.size()<<endl;//求长度 
    cout<<"s是否为空"<<(s.empty()?"空":"非空")<<endl;
    cout<<"s="<<s<<endl;
    //string 类型和char*类型转换 
    const char *buf=s.c_str();
    cout<<"buf="<<buf<<endl;
    //字符串比较,可以直接使用比较运算符//== != >< ...... 
    if(s=="hello")
    {
        cout<<"s=hello"<<endl;
        
    }
    //查看某个位置上的字符
    //at()越界访问会抛出异常
    //[]不会 
    cout<<"s[3]="<<s[3]<<endl;
    cout<<"s[3]="<<s.at(3)<<endl;//可以通过异常捕捉 
    return 0;
}

字符2

#include <iostream>
#include <string.h>
using namespace std;
class MyString
{
    char* m_str;
    int m_nLength;
public:
    int size(){return m_nLength;}
    bool empty(){return m_nLength == 0;}
    MyString()
    {
    m_str=new char[1];
    m_str[0]=0;
    m_nLength=0;
    } 
    ~MyString()
    {
    if( NULL != m_str)
    delete []m_str;
    m_str=NULL;
    }
    //MyString s(5,'c');
    MyString( unsigned int length, const char& ch )
    {
    m_nLength=length;
    m_str=new char[m_nLength+1];
    for (int i=0;i<m_nLength;++i)
    {
        m_str[i]=ch;
    }
    m_str[m_nLength]='\0';
    }
    //MyString s(NULL);
    MyString(const char* str)
    {
    if (NULL==str)
    {
        m_str=new char[1];
        m_str[0]=0;
        m_nLength=0;
    }
    else
    {
        m_str=new char[strlen(str)+1];
        strcpy(m_str,str);
        m_nLength=strlen(str);
    }
    }
    MyString( const MyString& s )
    {
    m_str= new char[strlen(s.m_str)+1];
    strcpy(m_str,s.m_str);
    m_nLength=strlen(s.m_str);
    }
};
int main()
{
    MyString a("niho");
    cout<<a.size()<<endl;
}

//
//The larger of 10, 20 is 0 ,为什么不是
//20呢?问题在于输出操作符的优先级高于条件操作符
//所以输出 val1和 val2比较结果的 true/false 。
//

点菜


#include<iostream>
using namespace std;
class Waiter
{
    string m_name;//姓名 
    public:
        Waiter(string name):m_name(name)
        {           
        }
        ~Waiter()
        {
        }
    string getName()
    {
        return m_name;
    }
    void Serve(int iCount,string szFood);
    
};
void Waiter::Serve(int iCount,string szFood)
{
    cout<<m_name<<"上了"<<iCount<<"份"<<szFood<<endl;
    return ;
}
class Guest
{
    string m_name;
    public:
        Guest(string name):m_name(name)
        {
            
        }
        ~Guest()
        {
            
        }   
        void order(Waiter &w);
        void pay(Waiter &w);
};

void Guest:: order(Waiter &w)
{
    cout<<"**********点菜过程********"<<endl;   
    int iCount=0;
    string szFood;
    cout<<"请输入菜名";
    cin>>szFood;
    cout<<"请输入菜的份数";
    cin>>iCount;
    cout<<"**************************"<<endl;   
    cout<<m_name<<"向服务员"<<w.getName()<<"点了"<<iCount<<"份数"<<szFood<<endl;
    w.Serve(iCount,szFood);
    return ;
    
     
}
void Guest::pay(Waiter &w)
{
    cout<<"**********付款过程********"<<endl;   
    double money=0;
    cout<<"请输入付款金额:";
    cin>>money;
    cout<<"**************************"<<endl;   
    cout<<m_name<<"吃完中饭,向服务员"<<w.getName()<<"支付了" <<money<<"元餐费,离开了老盛兴"<<endl;
    return ;     
}
int main()
{
    Waiter w("小张");
    Guest g("小肥");
    g.order(w);
    g.pay(w);
    return 0;

运行结果:

**************点菜过程****************
请输入菜名:宫保鸡丁
请输入菜的份数:2
****************************************
小肥向服务员小张点了两份宫保鸡丁
小张上了2份宫保鸡丁
**************付款过程****************
请输入付款金额:45
****************************************
小肥吃完午饭,向服务员小张支付了45元餐费,离开了老盛兴

运行的先后顺序

#include<iostream>
using namespace std;
class Test
{
    int m_data;
    public:
        Test(int data):m_data(data)
        {
            cout<<"test("<<m_data<<")"<<endl;
        }
        ~Test()
        {
            cout<<"test("<<m_data<<")"<<endl;
        }       
};
Test t1(10);
void fun()
{
    Test t4(40);
    return ;
}
void show()
{
    static Test t5(50);
    return ;
}
int main()
{
    Test t2(20);
    Test t3(30);
    fun();
    show(); 
}
Test t6(60);
运行结果:
test(10)
test(60)
test(20)
test(30)
test(40)
test(40)
test(50)
test(30)
test(20)
test(50)
test(60)
test(10)

true or false(甩锅还是美女)

#include<iostream>
using namespace std;
int main()
{
    bool bSet=true;
    cout<<"请输入你的性别:"<<endl;
    cin>>bSet;
    cout<<"我叫Jack,是一位"<<(bSet?"甩锅":"美女")<<endl;
    cout<<"ture="<<true<<endl;
    cout<<"false"<<false<<endl;
    return 0;
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容