c++的类
1.编写一个.h文件 包含成员变量,方法(声明) 默认构造函数 ,析构函数
#pragma once
using namespace std;
class Person
{
public:Person() {cout << "c++的构造函数" << endl;};~Person() {cout << "c++的析构函数函数" << endl;};void setName(string pname);string getName();void printName();private:string name; };
2.编写一个实现类 导入.h文件 并实现其中的方法 : :表示类作用域
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
#include"Person.h"void Person::setName(string pname) {name = pname;
}string Person::getName() {return name;
}
void Person::printName() {cout << name << endl; }
3.测试输出结果
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include"Person.h"
using namespace std;int main(void) {Person p;p.setName("wyc");cout << p.getName() << endl; } c++的构造函数 wyc c++的析构函数函数
2.构造函数
1.构造函数: 默认构造函数不需要加括号执行 列如 Person p; 就会执行默认的 但是Person p() 不会,认为是函数的声明
class Person
{
public:Person() {cout << "无参构造函数" << endl;};Person(int age) {cout << "有参构造函数" << endl;};Person(const Person &p) {m_age = p.m_age;cout << "拷贝参构造函数" << endl;};~Person() {cout << "析构函数" << endl;};private:int m_age; };
2.Person(100) 称为匿名对象 ,会在这句话结束后释放这个对象,所以析构函数在这句话之后立即执行
3.Person p = Person(20) 而这种是随栈区而销毁 4.不能使用 拷贝构造初始化匿名对象,列如 Person( p1)
5.Person p2 = 100; 相当于调用有参的构造 Person p2 = Person(100); Person p3 = p2 相当于 Person p3 = Person(p2)
系统默认给的: 无参构造函数 拷贝函数 析构函数 如果自己提供 普通构造,系统不再提供,默认无参,但是还是有
如果自己提供拷贝,系统不会再提供任何默认构造函数
3.深拷贝浅拷贝
4.初始化列表
使用下列写法,初始化多个成员变量
class Person {
public:Person(int a, int b, int c) :p_a(a),p_b(b),p_c(c){}int p_a;int p_b;int p_c; };
5.类作为成员变量
1.调用顺序: 先调用 Phone的默认构造函数,再是Game类的, 再是自己的析构函数,再是 Phone的析构再是Game
class Person {Phone p;Game g;};class Phone
{
};class Game {};int main() {Person p;return 0; }
6.explicit关键字
1.如果在构造函数前加上这个,那么就可以防止隐式类型转换,列如Person p = "name" 会报错 ,相当于Person p = Person ("name");
7.new 关键字
1.new 关键字就相当于 第一句话
Person* p1 = (Person*)malloc(sizeof(Person)); 等于
Person* p2 = new Person;
1.之前 Person p; 这是在栈区开启的空间,函数结束会释放执行 析构函数 使用new 关键字存放在堆区,不会执行析构函数
malloc 返回void * 使用需要强转, 不会调用默认构造, 使用new 出来的 使用 delete p 释放对象 执行析构函数
2. new 出来的是一个指针
3.new 开启数组 new Person [10] 执行10次构造 , new 数组必须有默认构造方法 delete [10] P