基于c的c++学习day1

C到C++ :

C语言面向过程:
自己洗衣服
自己做饭
自己扫地
事情分条目和步骤,一步步来做。符合计算机的思维方式。
执行效率高,开发效率低

C++面向对象:
找个对象让Ta来做
调用不同的对象来处理事物,对象之间相互调用。符合人的思维方式
执行效率稍低,开发效率高

C语言核心是怎么来做
C++核心是让谁来做

C中没有的但是不是面向对象的内容:

1. 引用(重点)

给一个变量或常量取个别名,操作引用就相当于操作变量本身

#include <iostream>
using namespace std;
int main()
{
  int jiNan=90;
  int &quanCheng=jiNan;
  quanCheng+=5;
  //cout是输出  endl:end line 换行
  cout<<quanCheng<<" "<<jiNan<<endl; //95 95
  cout<<&quanCheng<<" "<<&jiNan<<endl; //0x61fe88 0x61fe88
}

引用的本质是指针常量 int * const b=&a;

引用的性质

1.当成为一个变量的引用之后,就不能成为其他变量的引用

#include <iostream>
using namespace std;
int main()
{
  int jiNan=90;
  int qingDao=91;
  int &quanCheng=jiNan;
  //&quanCheng=qingDao;//错误 不能重新赋值
}

2.引用必须有初始值,并且不能为NULL

#include <iostream>
using namespace std;
int main()
{
  int jiNan=90;
  int qingDao=91;
  //int &quanCheng; //错误必须赋值
  //int &quanCheng=NULL;//不能赋值NULL
}

3.如果初始化的内容是纯数字,引用需要定义为常引用。代表引用不可以更改所指向的内容

#include <iostream>
using namespace std;
int main()
{
  //引用是可读可写  100只是可读
  //int &b=100; 错误
    const int & b=100;
    cout<<b<<endl;
}

4.如果引用定义成常引用。就不能直接更改变量的值,但是通过变量可以间接改变引用的值

#include <iostream>
using namespace std;
int main()
{
  int a=100;
  const int & b=a;
  cout<<a<<" "<<b<<endl; //100 100
  //b++; error: increment of read-only reference 'b'
  a++;
  cout<<a<<" "<<b<<endl; //101 101
}

引用的应用
引用作为参数,不需要给参数开辟空间,也没有产生副本。提高了效率

#include <iostream>
using namespace std;
void test(int a,int b){
   int t=a;
   a=b;
   b=t;
}
void test2(int * a,int * b){
  int t=*a;
  *a=*b;
  *b=t;
}
void test3(int & n,int & m){
    int t;
    t=n;
    n=m;
    m=t;
}
int main()
{
    int n=10;
    int m=20;
    test2(&n,&m);
    cout<<n<<" "<<m<<endl; //20 10
    test3(n,m);
    cout<<n<<" "<<m<<endl;  //10 20
}


2.c++赋值

c++可以像下面这样赋值

#include <iostream>
using namespace std;
int main()
{
    int a=100;
    int b(200); //c++赋值
    cout<<a<<" "<<b<<endl; //100 200
    double c=3.14;
    int d(c); //强制转化 
    cout<<d<<endl; //3
}

键盘输入:
cin输入 ,cout输出
iostream中 i代表input o代表output

#include <iostream>
using namespace std;
int main()
{
  int a;
  cin>>a;
  cout<<"输入的值是"<<a;
}

3.string类型 字符串(掌握)

字符串类型不是基本的数据类型,而是c++中的一个类,内部有很多方法,方便处理字符串内容.

#include <iostream>
using namespace std;
int main()
{
    string s="123456";
    cout<<s[0]<<endl;
    cout<<s[6]<<endl; //效率高,超出数组范围不会报错,易出错
    //cout<<s.at(6)<<endl;//更安全 会报超出范围错误
    cout<<s<<endl;
    cout<<"字符串长度"<<s.length()<<endl; //6
    //for循环遍历
    for(int i=0;i<s.length();i++){
        cout<<s[i]<<" ";
    }
    cout<<endl;
    //for each方式遍历
    cout<<"用for each方式取"<<endl;
    //字符串中每个元素是char类型的。
    //string 对应字符数组 字符数组每一个元素是char
    for(char c:s){
        cout<<c<<" ";
    }
}

at方式取元素 更安全 ,用[]的方式效率高

4.内联函数 (掌握)

些函数代码量比较少(5行以内),运行时间比较短,如果调用的次数比较多,就需要考虑调用函数所花费的时间。用内联函数处理这样的问题。
在定义上加上inline关键字,在编译时自动展开到主函数中。

#include <iostream>
using namespace std;
void show(); //声明
inline void show(){ //定义
  cout<<"内联函数";
}
int main()
{
  show();
}

5.函数重载 (重点)

函数可以重名,根据参数的个数,参数的类型不同来区分具体调用哪个函数,不能以返回值来区分;省去解决相似问题,取名字花费时间,提高效率。
根据参数类型不同选取不同的函数
参数个数不同:

#include <iostream>
using namespace std;
//普通文员 销售 开发。。。
//参数个数不同选取不同的函数
void salary(int jiBen){
  cout<<"文员工资"<<jiBen<<endl;
}
void salary(int jiBen,int jiangJin){
  int total=jiBen+jiangJin;
  cout<<"销售工资"<<total;
}
int main()
{
    salary(2000);
    salary(2000,4000);
}

参数类型不同:

#include <iostream>
using namespace std;
void show(int a){
    cout<<"int:"<<a<<endl;
}
void show(string s){
    cout<<"string:"<<s<<endl;
}

int main()
{
    //根据参数类型不同选取不同的函数
    int n=100;
    show(n);
    string s="hello";
    show(s);
}


6.函数的默认值(掌握)

1.当有参数默认值的函数被调用的时候,如果不传参,就会选取默认值,否则就改成传入的数据。

#include <iostream>
using namespace std;
void draw(string color="黑色"){
  cout<<color<<endl;
}
int main()
{
    draw();
    draw("红色");
}


2.声明和定义只能一个位置加默认值

#include <iostream>
using namespace std;
void method(int a=10); //声明处加默认值
void method(int a){
    cout<<a<<endl;
}
int main()
{
    method();
}

3.当有多个参数加默认值时,”向后原则”,中间有一个参数有默认值,其后的参数都需要加默认值

#include <iostream>
using namespace std;
void method(int a=10); //声明处加默认值
void method(int a){
    cout<<a<<endl;
}
//定义加默认值 b加了默认值 c也必须加默认值
void method2(int a,int b=20,int c=40){ 
    cout<<a<<" "<<b<<" "<<c;
}

int main()
{
    method2(10,30);
}

4.函数重载不要和默认值一块用 可能会产生二义性,产生错误,编译器无法做出选择

#include <iostream>
using namespace std;
void method(int a){
    cout<<a<<endl;
}
void method(int a,int b=10){
    cout<<a<<endl;
    cout<<b<<endl;
}

int main()
{
    //method(20); 错误
}


哑元函数(熟悉)
参数只有类型,但是没有名字。这个参数就成为哑元,这样的函数成为哑元函数.
后续的运算符重载会用到

#include <iostream>
using namespace std;
void method(int){
    cout<<"hello"<<endl;
}
int main()
{
    method(20);
}


面向对象基础

1.类与对象的概念(重点)

抽象:把一个事物的关键点 提取出来
人可以作为一个对象,一个对象包括属性和行为
人的属性:姓名,性别,年龄 。 又称成员变量
人的行为:吃饭,跑步,学习。 又称成员函数/成员方法
属性:都是名词,用来描述事物是什么样子的
行为:都是动词。用来描述事物能做什么

属性:品牌,型号,
行为:载人 运行空调
类就是把对象的属性和行为“捆绑”在一起,作为一个整体。

#include <iostream>
using namespace std;
class Phone{ //类首字母大写
public: //公共权限
    string band;
    string model;
    int price;
    //打电话
    void communicate(){
        cout<<"打电话"<<endl;
    }
    //播放音乐
    void play_music(){
        cout<<"虽然我只是一只羊~"<<endl;
    }
    //玩游戏
    void play_game(){
        cout<<"Timi"<<endl;
    }
};
int main()
{


}

2.实例化对象(重点)

根据类来创建对象实例
1.栈内存对象出了生命周期(所在花括号执行完)自动销毁。
调用 方式通过对象名.调用函数

#include <iostream>
using namespace std;
class Phone{
public: //公共权限
    string brand;
    string model;
    int price;
    //打电话
    void communicate(){
        cout<<"打电话"<<endl;
    }

    //播放音乐
    void play_music(){
        cout<<"虽然我只是一只羊~"<<endl;
    }
    //玩游戏
    void play_game(){
        cout<<"Timi"<<endl;
    }
    void show(){
        cout<<brand<<" "<<model<<" "<<price<<endl;
    }
};
int main()
{
    Phone p;
    p.brand="iphone";
    p.model="14";
    p.price=10000;
    p.show();
    
    Phone * p2=new Ph
}

2.堆内存创建对象
用new关键字创建。delete销毁对象,如果不销毁,会造成内存垃圾。运行卡慢。
delete指向对象的指针

 Phone * p2=new Phone;
    p2->brand="xiaomo";
    p2->model="13";
    p2->price=999;

    p2->show();
    p2->communicate();
    p2->play_music();
    p2->play_game();
    delete p2;
    p2=NULL;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值