C++特殊成员

简介: C++特殊成员

const

const修饰的数据成员

1.常数据必须要初始化

2.初始化必须采用,初始化参数列表

3.不能够被修改

4.构造函数要初始化数据成员

#include<iostream>
#include<string>
using namespace std;
class MM
{
public:
  MM(int age, string name): age(10), name("ni"){}
  void printDate()
  {
    cout << name << " " << age;
  }
private:
  const int age;
  const string name;
};
int main()
{
  MM mm(10, "ni");
  mm.printDate();
  system("pause");
  return 0;
}

构造函数中,不能用好this指针访问常数据成员

const修饰的成员函数

const修饰的成员函数:常成员函数

书写:const写在函数的后面

特点:不能够修改里面的数据成员

如果想要修改,就必须要用mutable,(但一般情况,既然使用了常成员函数,就没有必要去修改它)

常成员函数可以和普通函数同时存在

作用:保护数据,不被修改

注意:构造函数和析构函数上,不允许使用const

#include<iostream>
#include<string>
using namespace std;
class MM
{
public:
  void print() const
  {
    //age = 10; //错误 不能够修改
    cout << this->age << endl;
    name = "温柔了岁月"; //可用mutable修改
  }
  //MM() const //错误  构造函数和析构函数不允许使用const
  //{
  //}
private:
  int age;
  mutable string name;
};
int main()
{
  system("pause");
  return 0;
}

const对象

1.const修饰的对象

2.常对象只能调用常成员函数

常对象只能调用常成员函数,如果调用普通函数将会报错

#include<iostream>
#include<string>
using namespace std;
class MM
{
public:
  MM(string name):name(name)
  {
  }
  void printDate() const
  {
    cout << name << endl;
  }
private:
  string name;
};
int main()
{
  const MM mm("温柔了岁月"); //常对象
  mm.printDate (); //常对象调用常成员函数
  return 0;
}

static

1.static成员不属于某一单独的对象,是属于类的,通俗的讲,是所有的对象可以共享的

2.static成员,它的访问可以不需要对象

static成员

#include<iostream>
#include<string>
using namespace std;
class MM
{
public:
  static int age;
  string name;
};
int MM::age = 2;  //类外初始化
int main()
{
  cout << MM::age << endl;  //static访问,不需要对象
  system("pause");
  return 0;
}

案例

算出下列age 和 m_age的值

#include<iostream>
#include<string>
using namespace std;
class MM
{
public:
  MM()
  {
    this->age++;
    this->m_age++;
  }
public:
  static int age;
  int m_age = 0;
  string name;
};
int MM::age = 0;  //类外初始化
int main()
{
  cout << MM::age <<  endl;  //static访问,不需要对象
  MM mm[3];
  cout << MM::age << endl;
  cout << mm->m_age << endl;
  system("pause");
  return 0;
}

1.第一个数,初始值为0,肯定结果为0

2. 第二个,注意是静态成员,这里为3,
因为静态变量都有一个共同点,共用,这里数组3个,都用一个,数组中每构建一个,函数调用一次,所以为3

3.第三个是普通的变量,调用一次就是1

static的成员函数

1.跟上面一样,static放在函数的前面

2.类外实现,也不需要static来修饰

3.静态函数中没有this->指针

4.静态成员函数访问问题

静态成员函数可以直接访问静态成员

静态成员函数访问非静态成员,要指定对象访问

方法一:静态成员函数传参

方法二:在静态函数定义对象去访问

#include<iostream>
#include<string>
using namespace std;
class MM
{
public:
  static string name;
  string m_name;
  static void test1();
  static void test2(MM &m_name);
  void test1(); //错误,不存在静态函数重载
};
void MM::test1()
{
  cout << name << endl;
  //cout << m_name << endl;//错误 
}
void MM::test2(MM & object)
{
  cout << object.m_name << endl; //通过传参
}
int main()
{
  system("pause");
  return 0;
}

静态函数不能重载



相关文章
|
19天前
|
存储 编译器 C++
【C++】深入探索类和对象:初始化列表及其static成员与友元(一)
【C++】深入探索类和对象:初始化列表及其static成员与友元
|
17天前
|
编译器 C语言 C++
C++入门3——类与对象2-2(类的6个默认成员函数)
C++入门3——类与对象2-2(类的6个默认成员函数)
22 3
|
17天前
|
存储 编译器 C++
C++入门3——类与对象2-1(类的6个默认成员函数)
C++入门3——类与对象2-1(类的6个默认成员函数)
19 1
|
19天前
|
存储 编译器 数据安全/隐私保护
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解2
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解
24 3
|
19天前
|
编译器 C++
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解1
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解
40 3
|
19天前
|
C++
【C++】深入探索类和对象:初始化列表及其static成员与友元(二)
【C++】深入探索类和对象:初始化列表及其static成员与友元
|
19天前
|
编译器 C++
【C++】深入探索类和对象:初始化列表及其static成员与友元(三)
【C++】深入探索类和对象:初始化列表及其static成员与友元
|
5月前
|
存储 Serverless 数据安全/隐私保护
C++ 类的成员函数和数据成员的技术性探讨
C++ 类的成员函数和数据成员的技术性探讨
60 0
|
2月前
|
编译器 C++ 索引
C++虚拟成员-虚函数
C++虚拟成员-虚函数
|
2月前
|
编译器 C++
virtual类的使用方法问题之C++类中的非静态数据成员是进行内存对齐的如何解决
virtual类的使用方法问题之C++类中的非静态数据成员是进行内存对齐的如何解决