c++类和对象学习笔记1

c++认为万事万物皆为对象,对象有其属性和行为;

具有相同属性和行为的对象可以成为类;

封装是类和对象的三大特性之一,封装的意义在于把属性和行为作为一个整体,表现生活中的事物和蒋属性和行为加以权限控制

语法:class+类名(person ~~){访public~~):属性/行为};

for example

class person{

public:

        int age;

        int high;

        void set(int x,int y)

        {age=x;high=y;}

}:这里就创建了一个简单的类,它的名称是person ,age ,high ,set是它的属性和行为。

访问权限有三种:1.public 公共权限;

                             2.protected 保护权限;

                             3.private 私有权限;

第一种权限权限无论在类内类外都可以访问它,后两种权限只有在类内才可以访问。

如下面所示:

class Cube
{
public:

    int getm_l()
    {
        return m_l;
    }
    
protected:
    void setm_l(int l)
    {
        m_l = l;
    }
private:
    int m_l;
    
};

这里创建了一个Cube的类,这里的getm_l函数我们可以在类外引用,也可以在类内;

setm_l函数我们只能在这个类内进行访问,否则就会报错,同理m_l我们也只能在类内进行访问。

在c++中定意类通常有两种方式一种是class,一种是struct;这两种有一些差别

class中它的默认权限是私有权限,在你不加任何权限限制的情况下,它的默认权限是私有权限;

struct中它的默认权限是公有权限。

这些权限设置都有它的意义,私有权限可以保护类的成员不被随意更改。

在我们编写一个类时我们通常会在多处地方调用这个类,而且类的成员太多时,我们的代码也会显得臃杂,我们这时候可以编写头文件使得,类的成员名称和操作分离出来。

对象的初始化和清理

为什么要对对象进行初始化和清理呢?一个对象或者是变量没有初始状态,对其使用后果是未知的,可能会引起一些错误,c++利用构造函数和析构函数来解决这个问题,这两个函数会被编译器自动调用。对象的初始化和清理是编译器强制要求做的事情,所以我们就算不提供构造函数和析构函数,编译器会 给我们提供两个空实现的函数。

构造函数和析构函数

构造函数主要作用于创建对象时i为对象的成员属性赋值,构造函数由编译器自动调用,无需手动调用;

析构函数主要作用于对象的销毁,在对象销毁前自动调用,执行一些清理工作。

构造函数的创建只需要类名加上括号.

析构函数的创建则在类名前多加一个~。

构造函数的分类和调用方式

按参数分类:有参构造,无参构造

按类型分类:普通构造和拷贝构造(不是拷贝构造函数其他都为普通构造)

创建拷贝函数时要在类名前加一个const

class person{

public:

        person()

        {cout<<"无参构造函数调用"<<endl;}

        person(int a)

        {cout<<"有参构造函数调用"<<endl;}

        person(const person&p)

        {cout<<"拷贝构造函数调用"<<endl;}

};

这里创建了三个构造函数,,每种构造函数都有它的特点。

调用方式:

括号法

class person{

public:

        person()

        {cout<<"无参构造函数调用"<<endl;}

        person(int a)

        {cout<<"有参构造函数调用"<<endl;}

        person(const person&p)

        {cout<<"拷贝构造函数调用"<<endl;}

};

void test1()

{

        person p1;

        person p2(10);

        person p3(p2);

        
}

以上就是括号法的使用,特别注意就是我们在用无参构造函数时不需要加括号,加上括号编译器会误以为我们创建了一个函数。

显示法:

沿用上面的person类

void test2()

{

        person p1;

        person p2=person(10);//匿名对象 

        person p3=person(p2);

//这里的person(10)和person(p2)称为匿名对象,它们在使用完后会被立即销毁。

//注意不要用拷贝构造函数来初始化一个匿名对象,例如person(p3),这里编译器会以为你输入的是person p3,会与上面造成对象重命名。
}

隐式转换法

继续沿用上面的person 类

void test ()

{

        person p1=10;//有参构造

        person p2=p1;//拷贝构造

}

以上就是三种常用的构造函数调用法。

  • 23
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值