泛型编程一:class类内的自我修养

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、面向对象高级编程

基于对象Objext Based和面向对象Object Oriented

1.基于对象主要是单一的class的设计,通常里面只有复数,就是不包含指针的
2.面向对象比如说多重class设计,如string类,包含指针,指针指向数组的首内存空间

代码文件

1.头文件:头文件防卫式声明,它可以防止头文件被多次包含

#ifndef _COMPLEX_
#define _COMPLEX_

#endif

泛型编程

2.cpp文件
3…hpp文件
注意系统安装的头文件用#include<>,而自己写的头文件要#include"complex"

4.class类里面inline函数,速度会快很多,一些简单的成员函数{}里面,编译器如果有能力的话,会弄成inline,这样编译速度会快很多
inline
5.写构造函数的时候是可以重载,但出现以下情况编译器会报错,有默认参数的存在时候回有可能编译器不知道重载

class Person{
Person()re(0),ne(0){}
Person(double r=0,double n=0):re(r),ne(n){


}

};

//当调用时
{
Person P1;
Person P2():
}

二、一个class的自我修养

1.数据都放在private

思考:如果把类的构造函数放在private会怎么样?
好处:经典设计模式为Singleton(单例),它在类里面就已经创建了一个对象,外界想要调用这个类需要经过一个特殊函数。
例子

2.构造函数用initialization list用来初始化(初始化列表)

常见有两种
1.常规

class complex{
public:
	complex(double r=0,double= i=0):re(r),im(i){}

private:
	double re,im;
};

2.子类中的构造函数


class Base {

    private:
        int x;
        int y;

    public:
        Base(int x, int y) {
            this->x = x;
            this->y = y;
        }

        int getX() {
            return x;
        }

        int getY() {
            return y;
        }

};
class Sub : public Base {

    private:
        int z;

    public:
        Sub(int x, int y, int z) :Base(x,y),z(z) {
    //这里的是子类的构造函数,此时他调用父类的构造函数对父类进行赋值
            
        }

        int getZ() {
            return z;
        }

        int calculate() {
            return Base::getX() * Base::getY() * this->getZ();
        }

};

3.常量成员函数(也就是成员函数括号右边加const)

常量成员函数通常对于那些只拿类对象里面的数据,而不做修改才会用。
对class里面数据操作的分成不会改变数据内容会改变数据内容的
不会改变数据内容的马上加const

const
在上面例子中,如果类外创建对象调用时使用const complex c1(2,1),而类内成员函数声明时候并不包含const,由于类外存在const就是说传进去的参数是不会改变的,但是如果有需要在类内是改变这个参数,那么此时就会出错。

4.传入参数的时候用引用传入pass by reference(to const)

1.引用底层就是一个指针,占用四个字节。如果使用值传递,传递进去的参数可能占上百字节,此时影响效率,如果此时用引用方式传递,速度比较快
2.假设穿进去的是字符型,只占一个字节,确实可以使用值传递,上面说的只是一种规范
3.使用const前提是,不需要改变里面的数据,只需要从类里面拿出来
uom

5.返回参数的时候也用应用返回。return by reference(to const)

思考:什么时候可以使用引用作为返回值?
回答:当返回的参数是类外已经存在的内存空间时,可以用引用作为返回。相反,如果返回值本身只是在类内创建的,那么当这个函数结束时,局部变量会被自动释放,此时如果用引用作为返回只能返回那个地址,但是里面的内存是被释放了。
1
上面例子中,是把传进来的类1+类2赋值给类1,就会最后返回的是类1,这时候可以用引用。如果此时函数中创建一个类3,把1和2 相加的值赋值给类3,然后返回类3就会出错,函数调用完后类3就会立刻释放。

友元来打破封装(相同class的各个对象互为友元)

优点:通过友元来获取数据会比在类里面通过函数拿到私有数据要快

相同class的各个对象互为友元
通过类作为参数传递,表面上看破坏了封装性,其实本质上各个对象都是互为友元的。
12

总结

主要介绍泛型编程里面,类内的规范,主要分成1.私有数据2.传入传出参数用引用3.构造函数初始化列表4.成员函数()后加const5.友元破坏封装性。

相关推荐

  1. GO - 编程

    2024-04-27 18:34:04       13 阅读
  2. mybatis对多查询,list中是包装

    2024-04-27 18:34:04       34 阅读
  3. 14 # 约束

    2024-04-27 18:34:04       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-27 18:34:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-27 18:34:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-27 18:34:04       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-27 18:34:04       20 阅读

热门阅读

  1. 【C++例】虚函数—代码实例

    2024-04-27 18:34:04       12 阅读
  2. jQuery

    jQuery

    2024-04-27 18:34:04      10 阅读
  3. c++ 计算引物退火温度

    2024-04-27 18:34:04       13 阅读
  4. 【48天笔试强训】day13

    2024-04-27 18:34:04       20 阅读
  5. Swift中TableView的使用

    2024-04-27 18:34:04       15 阅读
  6. 【uni】微信朋友圈图片九宫格样式

    2024-04-27 18:34:04       14 阅读
  7. 电脑安装双系统

    2024-04-27 18:34:04       18 阅读