1、构造函数

特征: 

  • 和类名完全相同 
  • 没有返回值
  • 可以带参数,也可以没有(默认构造函数) 
  • 必须是(public)公有类型:创建对象会自动调用构造函数,如果不是 public,对象不会创建成功

作用:

对创建出的对象进行初始化 ,给对象属性赋初值(开辟空间,初始化) 

特点:

  • 不会被显示调用,构造函数在对象创建的时候自动调用 
  • 总是返回一个类的对象 
  • 当自定义了一个构造函数时。编译器将不会提供默认构造函数(无参) 
  • 创建对象时,有几个参数,就自动调用带有几个形参的构造函数

2、const

1)C变量

被修饰的变量不能改变 

2)C指针: 
指针常量:指针指向不能变,指向变量的值可以改变 , char *const p;
常量指针:指针指向可以改变,指向的值不能变 const char *p;

3)C++中const主要存在的三个位置 

const  int  func( const  int  a)  const 

  • const 返回值:修饰返回值是一个常量(只读,不能更改) 
  • const 形参:修饰形参为只读对象 
  • 函数末尾的const:用于修饰成员函数(函数体内不能修改成员变量的值)
//非const成员函数既可以调用const成员函数,也可以调用非const成员函数
    p1.print();         //void print() const
    p1.getName();       // char *getName()

//const 对象只能调用const成员函数,不能调用非const成员函数
    p4.getName();      //error
    p4.print();

//非const类型对象既可以赋值给const类型引用,也可以赋值给非const类型引用(指针一样)
    const Person &pt1 = p1;         //常引用不能做修改,用法和const类型对象一样
    Person &pt2 = p1;

//const类型对象只能赋值给const类型引用,不能赋值给非const类型引用
    const Person &pt4 = p4;
    Person &pt3 = p4; error

3、const成员变量和成员函数(常成员函数)

1)const成员变量

const 成员变量的用法和普通 const 变量的用法相似,只需要在声明时加上 const 关键字。初始化 const 成员变量只有一种方法,就是通过构造函数的初始化列表

2)const成员函数

  • const 成员函数可以使用类中的所有成员变量,但是不能修改它们的值
  • 通常将 get 函数设置为常成员函数。读取成员变量的函数的名字通常以get开头,后跟成员变量的名字,所以通常将它们称为 get 函数
  • 常成员函数需要在声明和定义的时候在函数头部的结尾加上 const 关键字
class Student
{
public:
    Student(char *name, int age);
    void show();        //声明常成员函数
    char *getname() const;
    int getage() const;
private:
    char *m_name; int m_age;
};

Student::Student(char *name, int age): m_name(name), m_age(age){ }

void Student::show()
{
    cout<<m_name<<"的年龄是"<<m_age<<",成绩是"<<m_score<<endl;
}

//定义常成员函数
char * Student::getname() const
{
    return m_name;
}

int Student::getage() const
{
    return m_age;
}

//const的对象,不能调用非const的成员函数
const student stu;
stu.show();         //错误

const 的位置:

  • 函数开头的 const 用来修饰函数的返回值,表示返回值是 const 类型,也就是不能被修改
  • 例如const char* getname()
  • 函数头部的结尾加上 const 表示常成员函数,这种函数只能读取成员变量的值,而不能修改成员变量的值
  • 例如char * getname() const