C++ 类的用法

一、封装指的是将数据以及使用它们的方法进行逻辑编组

二、数据抽象是指,只向外界提供关键信息,并隐藏其后台的实现细节,即只表现必要的信息而不呈现细节。(使用private关键字实现数据抽象,类外任何人不能访问,友元除外)

三、struct与class

1、相对于C中struct,C++做了很大的扩充。基本上和class 差不多。只有一些细节上的差别。

2、对于成员的默认访问权限,class是private,struct是public。需要注意的是,程序中应该明确指出访问权限,不要依赖默认的访问权限。对于其它默认的情况也是一样,尽量明确指出来,这是一个良好的编程习惯,增加代码的可读性。

3、对于默认的继承方式,class是private,struct是public。需要注意的是,class可继承class,也可继承struct。struct可继承struct,也可继承class。默认的继承方式取决于子类是struct还是class。和上面一样,这里应该明确指出继承方式,而不应该依赖默认。

4、对于struct和class,都可以使用使用{}来赋初值,前提是:a、字段是public,因为public才可以直接访问;b、没有父类,没有自定义构造方法和虚方法,可以有普通的成员方法。可以认为,继承,自定义构造方法,虚方法改变了类的内部结构,因此编译器禁止使用{}赋初值。

5、定义模版参数,使用typename,也可以使用class。但是不能使用struct。

四、构造函数

默认构造函数是调用时可不提供参数的构造函数(若无默认,编译器自动创建成员属性,但不可初始化POD类型如int,字符,原始指针属性),重载构造函数,可以创建一个将姓名作为参数的构造函数,重载构造函数很有用,可以帮助初始化变量。没有默认构造函数,自己又有重载构造喊,C++编译器不会为此生成默认构造函数。也有带默认值的构造函数参数Human(string Humanname =“kj”,实例化human对象可以不提供参数)。包含初始化列表构造函数(Human(string Inputname,int Inputage):Name(Inputname),Age(Inputage){})

五、析构函数

对象销毁时自动调用,重置变量以及释放动态分配的内存以及其他资源的理想场所

六、复制构造函数

浅复制:复制类对象,复制指针成员,但不复制指针所指向的缓冲区,其结果就是,两个对象指向同一块动态分配的内存。导致不再有有效的地址调用delete(销毁其中一个对象时释放其内存,导致其无效)

复制构造函数是一个特殊的重载构造函数,编写类的成员需提供。每当对象被复制(包括将对象按值传递给函数),编译器都将调用复制构造函数。复制构造函数接受一个以引用方式传入的当前类的对象作为参数,这个参数是源对象的别名,确保对所有缓冲区进行深复制。Mystring(const Mystring& CopySource)

Mystring SayHello("hello")

UseMystring(SayHello)

若overwrite= SayHello 赋值操作 没有指定任何赋值操作符,编译器提供的默认赋值元素安抚将导致浅复制。为避免赋值进行浅复制,需要实现复制赋值运算符

MyString ::operator= (const MyString& CopySource)

{}

七、this指针

一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。

this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。例如,调用date.SetMonth(9) <===> SetMonth(&date, 9),this帮助完成了这一转换 .

在成员函数内部,我们可以直接使用调用该函数的对象的成员,而无需通过成员访问运算符来做到这一点,因为this所指的正是这个对象。任何对类成员的直接访问都被看成this的隐式使用。

this的目的总是指向这个对象,所以this是一个常量指针,我们不允许改变this中保存的地址。

一种情况就是,在类的非静态成员函数中返回类对象本身的时候,直接使用 return *this;另外一种情况是当参数与成员变量名相同时,如this->n = n (不能写成n = n)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值