您的位置:首页 > 娱乐 > 八卦 > 网站建设案例教程试卷_镇江金山网镇江新闻_在线网站seo诊断_武汉百度

网站建设案例教程试卷_镇江金山网镇江新闻_在线网站seo诊断_武汉百度

2024/12/23 3:44:35 来源:https://blog.csdn.net/weixin_45169583/article/details/143216068  浏览:    关键词:网站建设案例教程试卷_镇江金山网镇江新闻_在线网站seo诊断_武汉百度
网站建设案例教程试卷_镇江金山网镇江新闻_在线网站seo诊断_武汉百度

析构函数

在创建一个新的对象时,自动调用的函数,用来进行“初始化”工作:对这个对象内部的数据成员进行初始化。

如果构造函数中没有申请资源(主要是内存资源)那么很少使用析构函数
函数名:
~类型
没有返回值,没有参数,最多只能有一个析构函数
访问权限:
一般都使用 public
使用方法:
不能主动调用。
对象销毁时,自动调用。如果不定义,编译器会自动生成一个析构函数(什么也不做)

this指针

类的静态成员函数不能使用this指针

#include <iostream>
using namespace std;class Human {
public:Human();Human(int age, int salary);int getAge() const;const Human* compare1(const Human* p);const Human& compare2(const Human&p) const;
private:int age = 28;int salary;char* addr;
};Human::Human(int age, int salary) {this->age = age;this->salary = salary;
}
int Human::getAge() const {return age;
}const Human* Human::compare1(const Human* p) {if (age > p->age) return this;else return p;
}const Human& Human::compare2(const Human& p) const {if (age > p.age) return *this;else return p;
}int main() {Human h1(25, 1800);Human h2(30, 2500);cout << h1.compare2(h2).getAge() << endl;return 0;
}

const 成员函数

需求分析:
const的Human对象,不能调用普通的成员函数。
分析:
C++认为,const(常量)对象,如果允许去调用普通的成员函数,而这个成员函数内部可能会修改这个对象的数据成员!而这讲导致const对象不再是const对象

类里面有两种const

一个是const对象 const Person per;

一个是const 方法 void func() const {}

C++的成员函数设置建议:
如果一个对象的成员函数,不会修改任何数据成员,那么就强烈:

把这个成员函数,定义为const成员函数!

const成员函数无法调用

可以看到const对象无法调用非const的成员函数

const 数据成员的初始化方式:
1.使用类内值(C++11 支持)
2.使用构造函数的初始化列表
(如果同时使用这两种方式,以初始化列表中的值为最终初始化结果)注意:不能在构造函数或其他成员函数内,对const成员赋值!

#include <iostream>class MyClass {
public:// 使用类内值初始化 (需要C++11支持)int const myConstValue1 = 5; // 构造函数MyClass(int value): myConstValue2(value),  // 使用构造函数的初始化列表myConstValue1(10) {    // 这里的myConstValue1会覆盖类定义内的初始化值// 注意: 不能在这里对const成员赋值// myConstValue1 = 20; // 这是错误的!}void printValues() const {std::cout << "myConstValue1: " << myConstValue1 << std::endl;std::cout << "myConstValue2: " << myConstValue2 << std::endl;}private:int const myConstValue1;int const myConstValue2;
};int main() {MyClass obj(20);obj.printValues();return 0;
}

类文件的分离

实际开发中,类的定义保存在头文件中,比如Human.h【类的声明文件】(C++PrimerPlus)类的成员函数的具体实现,保存在.cpp文件中,比如Human.cpp【类的方法文件】(C++PrimerPlus)
其他文件,如果需要使用这个类,就包含这个类的头文件。

Human.h

#pragma once
#include <iostream>
#include <string>class Human {
public:Human();int getCount();
private:std::string name = "John";int age = 28;static int count;
};

Human.cpp

#include "Human.h"int Human::count = 1;Human::Human() {std::cout << "构造函数" << std::endl;
}int Human::getCount() {return count;
}

对于非 const 的类静态成员,只能在类的实现文件中初始化。const 类静态成员,可以在类内设置初始值,也可以在类的实现文件中设置初始值。(但是不要同时在这两个地方初始化,只能初始化1次)

const静态成员变量

对于非const静态成员变量,必须在类外部定义和初始化。这是因为静态成员变量是在全局命名空间中存储的,而不是在类定义中。这意味着你不能在类声明中给出初始化值,只能在类外部给出。

对于const静态成员变量

有两种初始化方式:

  1. 在类内部初始化:可以直接在类声明中初始化。
  2. 在类外部初始化:可以在类外部初始化,但不能重复初始化

类内初始化

类外初始化

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com