BoolanC++第一周笔记

第一周:C++面向对象高级编程(上)

C++面向对象语言

class中就应该包含两个部分,一个是复数,包括实部和虚部;第二部分就是能够对复数作用的函数,比如加减乘除。可以创造很多个复数的数值存储在内存地址中,函数就只需要一套地址。
字符串

对于string,字符串里面有一根指针,指向一串字符。当想要设计一个class需要指针时,需要很小心。

基于对象

面对的是单一的class的设计。

面向对象

面对的是多重classes的设计,classes 和classes之间的关系。

C++的代码基本形式

c++代码分为三个部分:头文件,主程序和标准库。

主程序使用头文件要用:#include<iostream.h> 相当于是python中引用库的意思:import pandas as pd。如果你需要引用你自己写的东西,用"":#include "complex.h"

标准库也是以头文件的形式:.h(header files),也要 #include <>。

#include <iostream.h>
using namespace std;
​
int main(){
    int i = 7;
    cout << "i=" << i <<endl; 
    //想象是右边的到cout屏幕中,一个一个丢。其实是"流"的意思。
    
    return 0;
}


头文件header的写法

#ifndef__COMPLEX__
#define__COMPLEX__
//防卫式声明
​
#endif



告诉编译器,如果没有命名complex,定义complex。

头文件布局
//0:
//include <cmath>
​
class ostream;
class complex;
​
complex&
    __doapl (complex* ths, const complex&);
​
//1: class declarations 函数的声明
class complex
{
    
};
//2: class definition  函数的定义
complex::function...

写一个复数:#1 声明 //符号为cpp的注释,和python不同。
//class head 任何一个class要有一个head
template<typename T>
class complex
{
    private:
    T re, im;  //re 实部 im 虚部 T只是一个后面的数的类型的模型
    friend complex&__doapl (complex) 
};
{
    complex<double> c1(2.5,1.5);
    complex<int> c2(2,6);
    //complex<double>代表,在complex的类中,用double的类型的数值,也就是用double指明为T。
}

inline 内联函数

(1)将inline函数体复制到inline函数调用点处; (2)为所用inline函数中的局部变量分配内存空间; (3)将inline函数的的输入参数和返回值映射到调用方法的局部变量空间中; (4)如果inline函数有多个返回点,将其转变为inline函数代码块末尾的分支(使用GOTO)。

理解:相当于一个外面的方程,调用这个方程时就用这个方程。并且,它和调用函数不同,是复制。如果是在函数本体内定义,就是inline function。

比如:


访问级别

//求0-9的平方
inline int inlineFunc(int num){
    if(num>9||num<0)
        return -1;
    return num*num;
}
int main(int argc,char* argv[]){
    int a=8;
    int res=inlineFunc(a);
    cout<<"res="<<res<<endl;
}

public: 和 private: 数据部分应该是private,函数部分放在public。

{
    complex c1(2,1); //创建一个对象complex,调用函数complex
    cout << c1.real();  //通过real函数得到实部
    cout << c1.imag();  //通过imag函数得到虚部
}
​
{
    complex c1(2,1); //创建一个对象complex,调用函数complex
    cout << c1.re;  //直接拿c1的实部
    cout << c1.im;  //直接拿c1的虚部
    //两个操作都不行,因为re和im的值是封装在private中的。只能通过调用public的函数拿。
}

构造函数

构造函数可以有很多个 overloading(重载) 相同函数有一个以上

class complex
{
public:
    complex (double r=0, double i = 0) //函数和类名称要一致 可以拥有参数 参数可以有默认值 如果创建值时没有指明就用默认值 构造函数没有返回值(return),因为它就是创建class complex
        : re (r), im (i) //initialization list(初始值) 把r设到re中,把i传到im中。为什么要放到这里,而不是在大括号里?一个值,应该先初始化,再赋值。这个阶段就是初始化。赋值怎么赋值呢? {re = r; im = i;}
    {}                
}

这里,先复习函数基本知识:

要使用C++函数,必须完成如下工作:提供函数定义;提供函数原型;调用函数。

演示:好了,从定义函数开始。

#include <iostream>
void simple();
​
int main()
{
    using namespace std;
    cout<<"main()will call the simple() function.\n";
    simple(); //function call
        cout<<"main() is finished with the simple() function. \n";
    // cin.get();
    return 0;
}
void simple()
{
    using namespace std;
    cout<<"im but a simple.\n";
}

函数分为有返回值的,没返回值的。没返回值的称为void函数。其通用格式如下:

void functionname(paraterlist)
{
    statements;
    return;    //optional 标记了函数的结尾
}
//没返回值的函数
using namespace std;
​
void cheers(int n)
{
    for (int i =0; i<n; i++)
        cout<<"cheers"<<endl;
        cout<<endl;
​
}
int main()
{
    cheers(10);
}
//有返回值的函数,必须使用返回语句,以便将值返回给函数,然后返还给调用函数。
//怎么返还的呢?函数通过将返回值复制到指定的cpu寄存器或者内存单元中来将其返回。然后,调用函数将查看这个内存单元。
​

下面是函数原型,经常隐藏在include中。就是include后面那2个。函数参数和按值传递

#include <iostream>
using namespace std;
void cheers(int);  //no return value
double cube(double x); //returns a double 这里是,输入的必须是double,返回的也是。输入的类型声明在x前面,返回的类型在cube前面。
int main()
{
    cheers(5);   //调用没返回值的函数。函数名cheers加上参数5,再加上分号 ;。
    cout<<"GIve me a number";
    double side;
    cin >> side;
    double volume = cube(side);   //调用有返回值的函数cube,在这里有返回值,让调用函数main调用,拿到地址,可以用来赋值给volume。
    cout <<"A"<<side<<"foot cube has a volume of ";
    cout <<volume << "cubic feet.\n";
    cheers(cube(2));
    return 0;
}
void cheers(int n)
{
    using namespace std;
    for (int i=0 ; i < n; i ++ )
        cout<<"cheer"<<endl;
}
double cube(double x)
{
    return x*x*x;
}

用于接收传递值的变量叫做形参。传递给函数的值称为实参。实参:argument 形参:parameter。

double cube(double x);
int main()
{
    double side = 5;  //创建side变量,将5赋值给它
    double volume = cube(side);  //将值5传递给cube函数
}
double cube(double x)  //创建变量x,将传递的值5赋值给它

每个函数都有自己的变量,每个变量都有自己的值。

void n_char( char c, int n) //two argument

函数可以有多个参数,用逗号隔开。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值