C++入门(7):对象

C++入门(7):对象

类 = 属性 + 方法;
类名的第一个字母一般采用大写,类声明的末尾必须加上分号“;”;C++允许在类里声明常量,但不允许对它赋值,除非创建一个静态常量。

构造器
1)构造器的名字和它所在类的名字一样;
2)系统会在创建出某个新实例之后,立刻自动调用这个类的构造器;
3)构造器永远不返回任何值。
如果没有在类里定义一个构造器,编译器会自动创建一个,形式为:ClassName::ClassName(){},还会创建一个副本构造器。
构造器经常需要重载,即同一个类可以有多个构造器定义,它们名字一样,只是在输入参数的个数和类型上有差异。

析构器
在销毁一个对象时,系统会自动调用类的另一个特殊方法:析构器;
析构函数名也是类名,只是函数名前多了一个波浪符(~);
析构器永远不返回任何值且不带输入参数,声明只有一种形式:~ClassName()。

this 指针
在类里, this 指针代表当前对象,其基本用途是避免二义性(尤其在引用变量和属性的时候)。

下面通过举例及讲解来认识C++中对象的相关知识:

#include <iostream>

class Student{
    public:
        static const bool flag = true ;    //静态常量,这样是可以的!
        char sex;
        std::string yourName;

        Student(char s);                   //构造函数,输入参数有默认值时为默认构造器,参数可选,一般来说,每个类至少应该有一个默认构造器
        ~Student();                        //析构函数

        void print(std::string name);      //给类添加方法:1)先在类的声明里创建一个方法的原型;2)方法的定义(实现)通常在类声明的后面 。
        void inputName() ;
};

//如果在类声明里声明和定义函数,其效果等同于在请求编译器把每个函数当做一个内联函数来对待。

Student::Student(char s)                    //如果构造器声明改为:student(char sex);则为避免二义性,构造器定义中的赋值应改为:this.sex = sex;
{
    std::cout << "I am a Constructor." << std::endl;
    sex = s;
}

Student::~Student()
{
    std::cout << "I am a Destructor." << std::endl;
}

void Student::print(std::string name)       //定义类的方法的函数体时,必须指明该方法属于哪个类 :ClassName::functionName
{
    std::cout << "Nice to meet you, " << name << std::endl;
    std::cout << "You are " << sex << std::endl;
}
void Student::inputName()
{
    std::cout << "Honey, what's your name? " << std::endl;
    if(flag)
    {
        std::cin >> yourName;
        if(std::cin.good())
        {
            print(yourName);                //类中方法可以相互调用
        }
        else
        {
            std::cout << "See you next time." << std::endl;
        }
    }
}

int main(int argc, char** argv) {

    Student student1('F');                  //创建类的实例,即对象;由于它的构造函数有参数,所以实例化时需要传入参数
    student1.inputName();                   //调用类的方法

    Student student2 = student1;            //把一个对象赋值给另一个同类的对象将使同名的属性有同样的值
    std::cout << "student2's sex is " << student2.sex << std::endl;   //程序结束之后,需要调用两次析构器

    return 0;
}

运行结果为:

I am a Constructor.
Honey, what's your name?
xiuxiu
Nice to meet you, xiuxiu
You are F
student2's sex is F
I am a Destructor.
I am a Destructor.

C++入门(6):复杂的数据类型

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值