第三十七篇,C++中函数带默认参数,类和对象的定义,C++中的字符串string详解。

C++标准
======================================
   1.C++标准
        1998年 --》C++语言规范
        2011年 --》C++新的语法
        2014年 --》C++新的语法
        2017年 --》C++新的语法
     如果你的编译器g++,版本太低,有可能新的语法不支持

函数带默认参数
======================================
   1.概念
         C++允许定义函数的时候,给函数的形参设置默认值
         比如:show_anybmp(int w,int h,int x,int y,const char *bmppath)
               show_anybmp(int w,int h,int x=0,int y=0,const char *bmppath="1.bmp")
     好处/优势
         程序员调用这种函数的时候,灵活性很强
         如果程序员传递了新参数--》就使用新参数
         如果程序员没有传递参数--》就使用默认参数
         默认参数,程序员可传可不传,自己掌握主动权

   2.语法规则
            函数名(形参1,形参2=默认值,形参3=默认值)
     第一:函数带默认参数,定义这个函数的时候默认值只能是从右到左连续默认,中间不可以间断
     第二:函数带默认参数,程序员调用该函数的时候,传递实参只能从左到右连续传递,中间不可以间断


类和对象
======================================
   1.面向对象编程的三大基本思想(C++  java)
          类的封装(自定义了类)
          继承
          多态

   2.类和对象
        类的思想:日常生活中随处可见
                  动物--》 哺乳
                           两栖
                           行为动作:跑,吃,跳
                           属性信息:耳朵,颜色
                  电脑--》笔记本
                          台式机
                  飞机--》大型客机
                          中型客机
                          小型客机
        (1)定义类
             class 类的名字 //类名建议你首字符大写
             {
                类的成员
             };
           类中的成员
               分为两大类:成员属性(成员数据/成员变量) --》描述类具有的参数信息
                           成员函数(成员方法) --》描述类具有的功能
        (2)使用类
             定义了一个类,相当于程序员发明了一种新的数据类型
             类就是一种数据类型,跟当年你定义结构体一样的道理 
             语法规则:
                 数据类型         变量名
               

  int                a;
  double           b;
  Animal           c;   //定义了    Animal类型的变量,变量名叫做c
                                        //定义了Animal类的一个对象,对象名叫做c
  struct student   stu;


            什么是对象
                  对象指的是你使用类名定义的那个变量,C++把它称之为对象(把变量换了一个称呼)
            如何使用类中的成员方法/成员属性
                  需要定义对象,通过对象去访问类中的成员
        (3)类中成员的权限
              C++规定:类中的成员有三种权限,分别是公有(public)  私有(private)  保护(protected)
              权限的作用:限制外界对于这个类中成员的访问
                         保护类中的成员数据
              权限修饰符:  
                  public: 类中的成员可以通过对象在外部访问
                  private:类中的成员不可以通过对象在外部访问
                  protected:类中的成员不可以通过对象在外部访问
                      private和protected区别:
                             体现在继承的时候,子类可以使用父类的保护成员,但是子类不能使用父类的私有成员
                             保护:对外隐藏,对子类不隐藏
                             私有:到处隐藏
                             公有:谁都可以用
           注意:定义一个类,如果没有使用任何权限修饰符,那么默认都是私有的(private)
                 一般来说,成员方法我们定义成公有的(方法提供接口给外面使用)
                           成员属性我们定义成私有的(数据对外隐藏,不给别人轻易使用)
        (4)对象调用成员方法/成员属性
               写法一:定义了普通对象--》栈空间
                     

  Animal a;
  a.eat();  //通过小数点


               写法二:定义了对象指针--》堆空间
                     

   int *a=new int;
   Animal *p=new Animal;
   p->eat();

   3.成员函数的两种写法
        写法一:成员函数定义在类的内部
        写法二:成员函数定义在类的外部
           

   void Computer::opencomputer()
              {
             cout<<"电脑开机"<<endl;
              }


              ::叫做类作用域运算符,告诉编译器这个函数是属于Computer这个类的成员函数
        注意:如果成员函数的源码特别长--》建议你写在类的外部

   4.getxxx和setxxx成员方法去获取/设置成员属性
        思路:由于成员属性一般设置成私有的,不能通过对象直接访问
              定义成员方法间接去访问成员属性

   5.类的大小
         类的大小计算规则跟结构体计算规则一模一样
         类的大小:只计算成员变量的大小,成员函数不用计算

   6.this指针
         类定义引用跟基本数据类型写法一致的
            int a=99;
            int &b=a;
            Animal a;
            Animal &b=a;
         this指针:专门用来指向当前对象地址的一个指针,当前对象是谁,该指针就指向谁

#include <iostream>

using namespace std;

class Cat
{
public:
	void setAge(int _age)
	{
		age=_age;
	}
	//比较两只猫的年龄,返回年龄较大的那只猫
	Cat &compareAge(Cat &other)
	{
		//如何理解this指针??
		//Cat *this=当前对象的地址
		cout<<"验证this指针指向当前对象的地址: "<<this<<endl;
		if(age>other.age)
			return *this;  //我自己--》当前对象--》哪个对象调用成员方法,该对象就是当前对象
		else
			return other;
	}
private:
	int age;
};



int main()
{
	//定义两只猫
	Cat c1;
	Cat c2;
	cout<<"c1的地址: "<<&c1<<endl;
	cout<<"c2的地址: "<<&c2<<endl;
	c1.setAge(5);
	c2.setAge(3);
	
	//比较两只猫的年龄
	c1.compareAge(c2);
	
	c2.compareAge(c1);
	
}

   7.重新认识cout和cin
          cout本质是ostream类的对象
          cin本质是istream类的对象
          ostream类和istream类都是在系统<iostream>头文件中定义的
       

   namespace std
   {
        ostream  cout;
        istream  cin; 
   }


          cout.成员方法();
          cin.成员方法();
     查看C++的在线函数接口文档
          www.cplusplus.com


C++中的字符串string(很重要,使用频率很高)
======================================
  1.C++表示字符串的手段方法
      方法一:用char类型数组
      方法二:用char类型指针
      方法三:推荐使用string类表示字符串
              class string  //C++系统自带的
              {
               public:
                    大量公有的方法,帮助程序员处理字符串的各种操作
              };
    string优势
          第一:不必担心字符串长度的问题
          第二:大量好用的方法辅助你写代码

  2.string中的重要方法
       

 assign
 at
 back
 clear
 compare  //天坑
    //注意:参数表示从str4下标0开始,连续5个字符,去跟str1比较 
 if(str4.compare(0,5,str1)==0)
 copy
 c_str
 erase
 find
 insert
 length
 pop_back
 push_back
 replace
 str1.replace(0,2,str3);  //用str3整个字符串替换str1(从0开始2字节的内容)
 size
 substr

   3.遇到的问题
        问题一:error: ‘std::__cxx11::string {aka class std::__cxx11::basic_string<char>}’ has no member named ‘back’
                原因:back函数是c++11新增的
                解决方法:  g++ string的常用方法.cpp   -std=c++11  
                            -std=c++11 表示采用c++11新标准语法去编译程序

        问题二:中文字符串,取单个字符乱码
                原因:汉字每一个最少都是两个字节

     
                        
练习
======================================
   1.定义一个含有四个形参的函数,然后给默认值,体会函数带默认参数的两条规则
         showbmp(int w,int h,int x,int y)
         {

         } 
   2.定义Cat类,里面包含了成员方法和成员属性
   3.定义矩形类
       要求可以计算矩形的周长,面积
       属性:宽,高
     定义Bmp类
       要求可以显示任意大小的bmp
       属性:???


作业
======================================
   1.定义一个时间类  class Time
        要求:可以设置时间,时分秒
              可以打印时间,时分秒
        
   2.定义一个银行账户类 class Bankcount
        要求:可以设置户主名字,设置账户余额
              有存钱的方法
              有取钱的方法
              可以打印账户信息
  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肖爱Kun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值