戊辰人博客

青,取之于蓝而青于蓝;冰,水为之而寒于水。

C++学习复习笔记05 – 构造函数重载时的写法

日期:2015年8月5日 作者: 分类:编程 阅读:588

在C++类中进行构造函数重载时,有几种不同的简洁的写法。

下面先演示可读性最好的也是初学时常用的写法一:

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

class Person
{
public:
    string name;
    int age;

public:
    Person()
    {
        cout << "Person()" << endl;
    }
    // 构造函数一经重写,系统默认的无参数的将不复存在,若要使用得写出来
    Person(string name, int age)
    {
        this->name = name;
        this->age = age;
        cout << "Person(string name, int age)" << endl;
    }
};

int main()
{
    Person wuxie;
    Person xiaoge("张起灵", 22);

    return 0;
}

阅读全文…

C++学习复习笔记04 – 函数重载

日期:2015年8月5日 作者: 分类:编程 阅读:540

重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个运算符完成不同的运算功能。这就是重载函数。重载函数常用来实现功能类似而所处理的数据类型不同的问题。

知识要点:

1) 独立函数重载

2) 类中非构造函数重载

3) 类中构造函数重载

4) 析构函数不能重载,因为系统自动调用,无法传递参数.

 

代码示例:

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

class Person
{
public:
    string name;
    int age;

public:
    /* 类中构造函数重载 */
    Person()
    {
        cout << "默认调用原始构造函数" << endl;                         
    }     
    // 构造函数一经重写,系统默认的无参数的将不复存在,若要使用得写出来     
    Person(string name, int age)     
    {         
        this->name = name;
        this->age = age;
        cout << this->name << "调用重载的构造函数" << endl;
    }

    /* 类中非构造函数重载 */
    void display()
    {
        cout << "-----> " << this->name << " : " << this->age << endl;
    }
    void display(string msg)
    {
        cout << msg << endl;
    }
};

/* 独立函数重载 */
void run()
{
    cout << "快跑!!!" << endl;
}
void run(Person p)
{
    cout << p.name << "快跑!!!" << endl;
}

int main()
{
    Person wuxie;
    wuxie.name = "吴邪";
    wuxie.age = 20;
    cout << "-----------" << endl;

    Person xiaoge("小哥", 22);
    cout << "-----------" << endl;
    cout << endl;

    run();
    cout << "-----------" << endl;
    run(wuxie);
    cout << "-----------" << endl;
    cout << endl;

    xiaoge.display();
    xiaoge.display("小哥叫闷油瓶");

    return 0;
}

阅读全文…

C++学习复习笔记03 – 析构函数

日期:2015年7月17日 作者: 分类:编程 阅读:517

析构函数名也应与类名相同,只是在函数名前面加一个位取反符~,例如~stud( ),以区别于构造函数。它不能带任何参数,也没有返回值(包括void类型)。只能有一个析构函数,不能重载。如果用户没有编写析构函数,编译系统会自动生成一个缺省的析构函数(即使自定义了析构函数,编译器也总是会为我们合成一个析构函数,并且如果自定义了析构函数,编译器在执行时会先调用自定义的析构函数再调用合成的析构函数),它也不进行任何操作。所以许多简单的类中没有用显示的析构函数。

析构函数的知识点:

1. 函数名为取反符~加上类名,例如~stud( );

2. 无参数无返回值;

3. 在对象脱离作用域时,如程序退出、函数调用完成退出时,析构函数会自动调用;

4. 只能有一个析构函数;

 

由于自动调用,我们就可以在析构函数中做清理类工作,如释放堆中申请的内存。

 

代码实例:

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

class Person
{
public:
    Person()
    {
        cout << "创建类:构造函数Person()自动执行了" << endl;
    }
    ~Person()
    {
        cout << "结束类:析构函数~Person()自动执行了" << endl;
    }
};

int main()
{
    Person p1;
    cout << "------------------------------" << endl;
    return 0;
    //此处 p1 将脱离作用域,析构函数将发生作用
}

阅读全文…

C++学习复习笔记02 – 构造函数

日期:2015年7月6日 作者: 分类:编程 阅读:530

构造函数无返回值,函数名和类名相同,构造函数仅仅只是实现自动调用,并无特别。

语法与使用:

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

class Person
{
private:
    string name;
public:
    //构造函数声明方法:类名(实参表){}
    Person(string name)
    {
        //注意:this->name是类中私有变量,name是函数传递进来参数
        this->name = name;
    }

    void who_am_i()
    {
        cout << this->name << endl;
    }
};

int main()
{
    //使用:类名 对象名(实参表);
    Person p1("吴邪");

    p1.who_am_i();
    return 0;
}

阅读全文…

C++学习复习笔记01 – 类的创建与使用

日期:2015年7月6日 作者: 分类:编程 阅读:435

说明:本系列只展示C++中一些关键语法最直观的用法,对于细节不做复述,因为有很多经典的书籍上有详细的解释;另外,学习一门技术,不能只看视频或者学习别人的重点笔记,书本还是不可少的,它不仅可以从整体上对技术的学习路线进行一个概括,同时还能作为一本参考手册进行使用,所以,如果打算学习一门技术,买一本书是必要的,几十块的投资也是值得的。

 

类的声明:

class 类名
{
访问类型:
    成员变量或成员方法;构造函数;析构函数;
}; // 结束的分号";"千万不要忘记,初学时很容易忘掉的。

类的使用:类名 实例名;

举例:

#include <iostream>
// 不要问下面是什么意思,初学时记住要这样写就行,会用后再去翻书查资料。
using namespace std;

// 声明一个名为Code的类
class Code
{
// 访问类型为public,即公有类型,可以不写,默认为private类型
public:
    // 声明类Code的成员方法
    void geass()
    {
        cout << "有没有一首歌会让你想起我!!!" << endl;
    }
};

int main()
{
    Code p; // 实例化Code类,实例为p
    p.geass();
    return 0;
}

阅读全文…