C++初阶 —— 类与对象(二)

C++中的const对象与const成员函数     在前边几章的内容中,我们知道C++的类中可以有const成员变量,并且还知道类中的const成员变量只能在初始化列表中初始化。同样,在C++中,还存在const对象以及const成员函数,const修饰的对象为只读对象,他们的特性如下:     const成员函数的定义:需要在函数的声明及定义的后边加上const关键字    -const对象只能调用const成员函数     -const... 阅读详情

目录

一,构造函数

二,析构函数

三,拷贝构造函数

四,赋值运算符重载

五,日期类的实现

六,const成员函数

七,&取地址及const &取地址操作符重载

附


类的六个默认成员函数!

任何一个类,在不写的情况下,都会生成6个默认成员函数;

class Date{};

一,构造函数

  • 构造函数是一种特殊的成员函数,名字和类名相同,在创建类对象时由编译器自动调用,保证每个数据成员都有一个合适的初始值,并且在对象的生命周期内只调用一次;
  • 构造函数主要任务并不是开空间创建对象,是初始化对象;

特性:

  • 函数名与类名相同;
  • 无返回值;
  • 对象实例化时,编译器自动调用;
  • 可以重载;
  • 如类没有显式定义构造函数,C++编译器会自动生成一个无参的默认构造函数,用户显式定义则编译器不在生成;
  • 无参构造函数和全缺省构造函数,都称为默认构造函数,且默认构造函数只能有一个;即不传参数的构造函数,都是默认函数;推荐使用全缺省的构造函数;
  • 编译器自动生成的默认构造函数偏心处理:
    • 内置类型不初始化;
    • 自定义类型调用其自身的构造函数;
  • 即使在构造函数中没有显式地初始化类成员变量,编译器也会自动调用其默认构造函数;

注:成员变量,建议加前缀或后缀标识,与形参加以区分;

// 创建 Container 时:A::A() 被自动调用
class A {
public:
    A() { cout << "A()" << endl; }
};

class Container {
    A a;  // 没有显式初始化
public:
    Container() { } // 也没有指定a的值
};
//无参和有参构成函数构成重载
class Date
{
public:
	//无参构造函数,默认构造函数
	Date(){}
	//带参构造函数
	Date(int year, int month, int day)
	{
		_year = year;
		_month = month;
		_day = day;
	}
	void Display()
	{
		cout << _year << "/" << _month << "/" << _day << endl;
	}
private:
	int _year;
	int _month;
	int _day;
};

int main()
{
	Date d1; //实例化时调用无参构造函数
	d1.Display();
	Date d2(2021, 10, 23); //实例化时调用带参构造函数
	d2.Display();
	return 0;
}
//默认构造函数只能有一个
//调用默认构造函数时会造成歧义,不调用没关系
class Date
{
public:
	//无参默认构造函数
	Date()
	{
		_year = 1921;
		_month = 7;
		_day = 1;
	}
	//全缺省默认构造函数
	Date(int year = 2021, int month = 10, int day = 23)
	{
		_year = year;
		_month = month;
		_day = day;
	}
	void Display()
	{
		cout << _year << "/" << _month << "/" << _day << endl;
	}
private:
	int _year;
	int _month;
	int _day;
};

注:C++把类型分为内置类型和自定义类型

  • 内置类型/基本类型,即语法已经定义好的类型,如int/char等;
  • 自定义类型,即自己定义的类型,如struct/class/union等;
class Time
{
public:
	Time()
	{
		cout << "Time()" << endl;
		_hour = 0;
		_minute = 0;
		_second = 0;
	}
private:
	int _hour;
	int _minute;
	int _second;
};

class Date
{
private:
	//内置类型(基本类型)
	int _year;
	int _month;
	int _day;
	//自定义类型(类)
	Time _t;
};

int main()
{
	Date d; //会对自定义类型_t调用默认无参函数
	return 0;
}
class Date
{
public:
	Date()
	{
		_year = 2020; //构造函数内赋值
	}
private:
    //默认成员初始化
    //默认构造函数的缺省值 C++11,即实例化时调用构造函数未初始化此变量,赋此值
	int _year = 0; //2020
	int _month = 1; //1
	int _day = 1; //1
};

局部优先原则

//局部优先原则
class Date
{
public:
    Date(int year)
    {
        year = year; //构造函数内赋值
    }
private:
	int year;
};

int main()
{
	Date d(1); //成员变量year还是随机值,可this->year指定
    //Date d; //报错,已显式定义一个构造函数就不会在生成默认构造函数,可添加Date()=default;
	return 0;
}

二,析构函数

  • 与构造函数相反,析构函数是在对象销毁时,自动调用以完成类的一些资源清理工作;
  • 析构函数不是完成对象的销毁,局部对象的销毁工作是由编译器完成的;

特性:

  • 析构函数名是在类名前加字符 ~ ;
  • 无参数,无返回值;
  • 一个类有且只有一个析构函数,若未显示定义系统会自动生成默认的析构函数;
  • 对象生命周期结束时,C++编译器会自动调用;
  • 编译器自动生成的默认析构函数偏心处理:
    • 内置类型不处理;
    • 自定义类型调用其自身的析构函数;
  • 即使在析构函数中没有显式地析构类成员变量,编译器也会自动调用其默认析构函数;
//无继承关系下构造和析构顺序
//先构造成员,在本身构造,在本身析构,在成员析构
class A {
public:
    A() { cout << "A" << endl; }
    ~A() { cout << "~A" << endl; }
};

class B {
public:
    B() { cout << "B" << endl; }
    ~B() { cout << "~B " << endl; }
private:
    A a;
};

int main() {
   B b; //构造和析构顺序 b.A() B() ~B() b.~A()
    return 0;
}

//继承关系下构造和析构顺序
//先构造基类,在构造成员,在本身构造,在本身析构,在成员析构,最后基类析构
class A {
public:
    A() { cout << "A" << endl; }
    ~A() { cout << "~A" << endl; }
};

class B : public A {
public:
    B() { cout << "B" << endl; }
    ~B() { cout << "~B " << endl; }
private:
    A a;
};

int main() {
   B b; //构造和析构顺序 A::A() a.A() B() ~B() a.~A() A::~A()
    return 0;
}
class SeqList
{
public:
	//构造函数
	SeqList(int capacity = 0)
	{
		_pData = (int*)malloc(capacity * sizeof(int));
		assert(_pData);
		_size = 0;
		_capacity = capacity;
	}
	//析构函数
	~SeqList()
	{
		if (_pData)
		{
			free(_pData);
			_pData = NULL;
			_capacity = 0;
			_size = 0;
		}
	}
private:
	int* _pData;
	size_t _size;
	size_t _capacity;
};
class String
{
public:
	//构造函数
	String(const char* str = "jack")
	{
		_str = (char*)malloc(strlen(str) + 1);
        assert(_str);
		strcpy(_str, str);
		cout << _str << endl;
	}
	//析构函数
	~String()
	{
		cout << "~String()" << endl;
		free(_str);
	}
private:
	char* _str;
};

class Person
{
private:
	String _name;
	int _age;
};

int main()
{
    //对象p出此作用域销毁时,调用~String()
    {
	    Person p;
    }
	return 0;
}

三,拷贝构造函数

  •  拷贝构造函数,也称复制构造函数,会拷贝复制一个同类对象;
  • 只有单个形参,该形参是对本类类型对象的引用(一般使用const修饰,但并不限),在用已存在的类对象创建新对象时由编译器自动调用; 

特征:

  • 拷贝构造函数是对构造函数的一个重载;
  • 拷贝构造函数的参数只有一个且必须使用引用传参,使用传值方式会引发无穷递归调用;
  • 若未显式定义,系统会默认生成拷贝构造函数;
  • 默认的拷贝构造函数对象按内存存储字节序完成拷贝(叫做浅拷贝或值拷贝),不区分基本类型和自定义类型,都会处理;
    • 内置类型,类似memcpy函数;
    • 自定义类型,调用其自身的拷贝构造函数;

注,如成员变量是指针类型时,在完成拷贝(默认浅拷贝)构造后,程序销毁时会崩溃(对指针清理两次),应使用深拷贝构造;

以下形式会调用拷贝构造

  • 对象作为参数初始化对象;
  • 对象值传参,按值传递时会创建参数副本;
  • 对象值返回,按值返回时会创建对象副本;
class Date
{
public:
	//构造函数
	Date(int year = 2021, int month = 10, int day = 23)
	{
		_year = year;
		_month = month;
		_day = day;
	}
	//拷贝构造函数
	Date(const Date& d)
	{
		_year = d._year;
		_month = d._month;
		_day = d._day;
	}
private:
	int _year;
	int _month;
	int _day;
};

int main()
{
	Date d1;
	Date d2(d1); //书写形式也可为:Date d2 = d1;
	return 0;
}
class Date
{
public:
	//构造函数
	Date(int year = 2021, int month = 10, int day = 23)
	{
		_year = year;
		_month = month;
		_day = day;
	}
	//不一定要拷贝构造函数,使用指针也可以,但不方便
	Date(Date* p) //不是拷贝构造函数,只是普通的构造函数
	{
		_year = p->_year;
		_month = p->_month;
		_day = p->_day;
	}
private:
	int _year;
	int _month;
	int _day;
};

int main()
{
	Date d1;
	Date d2(&d1);
	return 0;
}
//无拷贝构造函数,默认生成
class Date
{
public:
	//构造函数
	Date(int year = 2021, int month = 10, int day = 23)
	{
		_year = year;
		_month = month;
		_day = day;
	}
private:
	int _year;
	int _month;
	int _day;
};

int main()
{
	Date d1;
	Date d2(d1); //浅拷贝或值拷贝
	return 0;

}
//无拷贝构造函数,默认生成
class String
{
public:
	//构造函数
	String(const char* str = "jack")
	{
		_str = (char*)malloc(strlen(str) + 1);
		assert(_str);
		strcpy(_str, str);
	}
	//析构函数
	~String()
	{
		cout << "~String()" << endl;
		free(_str);
	}
    //避免浅拷贝重复释放空间
	//~String()
	//{
	//	cout << "~String()" << endl;
	//	if (!_str) 
	//	{
	//		free(_str);
	//		_str = nullptr;
	//	}			
	//}
private:
	char* _str;
};

int main()
{
	String s1;
    //无拷贝构造函数,调用默认生成的拷贝构造函数,内置类型浅拷贝;
    //生命周期结束时,调用析构函数,s2释放空间后,s1又接着释放,会造成重复释放,系统会报错;
    //需将浅拷贝,改为深拷贝;
	String s2(s1);     
	return 0;
}

四,赋值运算符重载

  • 运算符默认是给内置类型使用的,自定义类型需运算符重载,即需自己定义实现运算符行为;
  • 为了增强代码的可读性,C++引入了运算符重载,其是具有特殊函数名的函数,有返回值类型,函数名,及参数列表,其返回值类型与参数列表与普通函数类似;
  • 函数原型:返回值类型 + operator + 运算符 + (参数列表) { 重载操作 }
  • 函数名:operator + 运算符

注:

  • 不能通过连接其他符号来创建新的操作符,如operator@;
  • 重载操作符必须有一个类类型或枚举类型的操作数;
  • 用于内置类型的操作符,其含义不能改变,即符号和内容含义一致;
  • 作为类成员的重载函数时,其形参看起来比操作数数目少一个成员函数的操作符,有一个默认的形参this,限定为第一个形参;
  • .*、::、sizeof、?:、. 以上5个运算符不能重载;
class Date
{
public:
	Date(int year = 1900, int month = 1, int day = 1)
	{
		_year = year;
		_month = month;
		_day = day;
	}
//private:
	int _year;
	int _month;
	int _day;
};
//引用成员变量,不可为private
bool operator == (const Date& d1, const Date& d2)
{
	return d1._year == d2._year
		&& d1._month == d2._month
		&& d1._day == d2._day;
}

int main()
{
	Date d1;
	Date d2;
    //正常调用方式为,operator==(d1,d2),但可读性很差,还不如写一个EqualDate函数
	cout << (d1 == d2) << endl; 
	return 0;
}
class Date
{
public:
    //构造函数
	Date(int year = 1900, int month = 1, int day = 1)
	{
		_year = year;
		_month = month;
		_day = day;
	}
    //运算符重载
    //bool operator == (Date* this, const Date& d2)
    bool operator == (const Date& d2)
    {
	    return _year == d2._year
		    && _month == d2._month
		    && _day == d2._day;
    }
private:
	int _year;
	int _month;
	int _day;
};

int main()
{
	Date d1;
	Date d2;
    //类似d1.operator==(d2),即编译器翻译为d1.operator==(&d1,d2)
	cout << (d1 == d2) << endl;
	return 0;
}

赋值运算符重载

  • 参数类型,const 类&;
  • 返回值,类&;
  • 检查是否自己给自己赋值;
  • 返回*this;
  • 一个类如没有显示定义赋值运算符重载,编译器会自动生成,完成对象按字节序的值拷贝,类似拷贝构造函数;
    • 内置类型,值拷贝;
    • 自定义类型,调用其自身的赋值运算重载函数;
class Date
{
public:
	//构造函数,无则默认会自动生成
	Date(int year = 1900, int month = 1, int day = 1)
	{
		_year = year;
		_month = month;
		_day = day;
	}
	//拷贝构造函数,无则默认会自动生成
	Date(const Date& d)
	{
		_year = d._year;
		_month = d._month;
		_day = d._day;
	}
	//赋值运算符重载,无则默认会自动生成
	Date& operator = (const Date& d)
	{
		if (this != &d)
		{
			_year = d._year;
			_month = d._month;
			_day = d._day;
		}
		return *this;
	}
private:
	int _year;
	int _month;
	int _day;
};

int main()
{
	Date d1;
	Date d2(2020, 2, 2);
	Date d3(2021, 3, 3);
	d1 = d2 = d3;
	return 0;
}
//无赋值运算符重载,默认生成
class String
{
public:
	//构造函数
	String(const char* str = "jack")
	{
		_str = (char*)malloc(strlen(str) + 1);
		assert(_str);
		strcpy(_str, str);
	}
	//析构函数
	~String()
	{
		cout << "~String()" << endl;
		free(_str);
	}
private:
	char* _str;
};

int main()
{
	String s1("hello");
	String s2("world");
	s1 = s2;
    //无赋值运算符重载,调用默认赋值运算符重载函数,内置类型浅拷贝;
    //生命周期结束时,调用析构函数,s2释放空间后,s1又接着释放,会造成重复释放,系统会报错;
    //需将浅拷贝,改为深拷贝;
	return 0;
}

五,日期类的实现

各种运算符重载的实现https://gitee.com/napoleoncode/start-code/tree/master/C++/Date

class Date
{
public:
	//获取某年某月的天数
	int GetMonthDay(int year, int month)
	{
		assert(month > 0 && month < 13);
		static int monthDays[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
		if (month == 2 && (year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
			return 29;
		return monthDays[month];
	}

	//构造函数
	Date(int year = 0, int month = 1, int day = 1)
	{
		_year = year;
		_month = month;
		_day = day;
		//判断合法性
		if (_year < 0 || (_month <= 0 || _month >= 13) || (_day <= 0 || _day > GetMonthDay(_year, _month)))
		{
			cout << _year << "/" << _month << "/" << _day << "->";
			cout << "非法日期" << endl;
		}
	}

	void print()
	{
		cout << _year << "/" << _month << "/" << _day << endl;
	}

	//运算符重载函数
	//日期 += 天数
	Date& operator += (int day);
	//日期 -= 天数
	Date& operator -= (int day);
	//日期 + 天数
	Date operator + (int day);
	//日期 - 天数
	Date operator - (int day);

	//前置++
	Date& operator ++ ();
	//后置++
	Date operator ++ (int);
	//前置--
	Date& operator -- ();
	//后置--
	Date operator -- (int);

	//日期 - 日期 (返回天数)
	int operator - (const Date& d);

	// > 运算符重载
	bool operator > (const Date& d);
	// >= 运算符重载
	bool operator >= (const Date& d);
	// < 运算符重载
	bool operator < (const Date& d);
	// <= 运算符重载
	bool operator <= (const Date& d);
	// == 运算符重载
	bool operator == (const Date& d);
	// != 运算符重载
	bool operator != (const Date& d);

private:
	int _year;
	int _month;
	int _day;
};

六,const成员函数

const 修饰类的成员函数

  • 将const修饰的类成员函数称为const成员函数;
  • 其实际修饰的是该成员函数隐含的this指针;
  • 表明在该成员函数中不能对该类进行修改;

注:

  • const成员函数,const对象和非const对象都调用;
  • 只针对只读型的成员函数,对修改型的成员函数不可加,如operator += ()等;
class Date
{
public:
	//构造函数
	Date(int year = 1900, int month = 1, int day = 1)
	{
		_year = year;
		_month = month;
		_day = day;
	}
	//Display(Date* this)
	void Display()
	{
		cout << _year << "/" << _month << "/" << _day << endl;
	}
private:
	int _year;
	int _month;
	int _day;
};

int main()
{
	const Date d(2020, 1, 1);
    //d.Display(&d)
	d.Display(); //报错,因为权限放大,void Display()const函数加const即可
}
//日期类,const修饰的成员函数
class Date
{
public:
	void Display()const
	{
		cout << _year << "/" << _month << "/" << _day << endl;
	}
private:
	int _year;
	int _month;
	int _day;
};

//编译器翻译为
class Date
{
public:
	void Display(const Date* this)
	{
		cout << this->_year << "/" << this->_month << "/" << this->_day << endl;
	}
private:
	int _year;
	int _month;
	int _day;
};

七,&取地址及const &取地址操作符重载

  • 这两个默认成员函数,一般不用重新定义,编译器会自动生成;
  • 只有特殊情况,才需要重载,如想获取到指定内容;
class Date
{
public:
	//取地址操作符重载
	Date* operator&()
	{
		return this;
	}
	//const取地址操作符重载
	const Date* operator&() const
	{
		return this;
	}
private:
	int _year;
	int _month;
	int _day;
};

附

  • 在传值传参或传值做返回值的过程中,在一个表达式调用连续步骤中,构造、拷贝构造会被编译器优化合并;
class Date
{
public:
	//构造函数
	Date() {
		cout << "Date()" << endl;
	}
	//拷贝构造函数
	Date(const Date& d) {
		cout << "Date(Date& d)" << endl;
	}
    //赋值运算符重载
	Date& operator=(const Date& d) {
		cout << "operator=" << endl;
		return *this;
	}
};
Date f() {
	Date d;
	return d;
}

int main() {
	//d拷贝构造给临时变量,临时变量在拷贝构造给ret1,两次拷贝构造
	//但编译器会优化,直接将d拷贝给ret1,一次拷贝构造
	// d -> tmp -> ret1 => d -> ret1    
    //vs19优化为Date() Date(Date& d),vs22直接优化为Date()
	Date ret1 = f(); 

	Date ret2;
	//d拷贝构造给临时变量,临时变量在赋值重载给ret2,1次拷贝构造
	// d -> tmp = ret2 
    //vs19优化为Date() Date(Date& d) operator=,vs22直接优化为Date() operator=
	ret2 = f(); 
	return 0;
}
Date f(Date d) {
	return d;
}

int main() {
	Date ret;
	//两个拷贝构造,Date d = ret,Date tmp = d;
    //vs19优化为Date(Date& d) Date(Date& d)
	f(ret);
	cout << endl;

	//Date()是匿名对象,生命周期只在这一行
	//Date()先构造, Date d = Date(), Date tmp = d
    //vs19优化为Date() Date(Date& d)
	f(Date()); 
	return 0;
}

C++创建一个类 用C++创建类 需要明白的概念 在C++ 中 定义类的关键字是 “”class”。 类声明:以数据成员的方式描述数据部分;以成员函数的方式描述公共接口。 类方法定义:如何描述类成员函数。 类的默认访问属性是private,一般我们将数据部分定义为private,将成员函数定义为public(成员函数也可以定义为private,此时,只有类的成员函数可以调用,对象不能直接调用)。 实现类成员函数:定义成员函数时,使用作用域解析运算符 (:???? 来表示该函数所属的类。 类的方法可以访问private组件 阅读详情

相关推荐

C++初阶——类和对象(二)

C++初阶——类和对象(二)

Maple_land的博客 1594

论const成员函数与非const成员函数

const成员函数 该函数的操作就是在类的成员函数尾部加一修饰符 " const " , 当我们不想在成员函数内部去修改成员变量时, 可用将其改为const成员函数 将const修饰的类成员函数称之为const成员函数, const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。 this指针本身就是一个类类型 const, 表指向不能变; 现在加了const修饰符后, 相当于给前面再加一个const, 表指向和内容都不能变. class Date{

y2zaijian的博客 615

C#+Winform+OpenCvSharp实战:5步搞定工业视觉检测框架(附源码下载)

本文详细介绍了如何使用C#、Winform和OpenCvSharp构建工业视觉检测框架,通过5个关键步骤实现高效、稳定的视觉检测系统。内容涵盖环境配置、相机集成、核心算法实现、系统集成与通信,以及部署优化,帮助开发者快速掌握工业视觉检测技术,提升检测精度和效率。附完整源码下载,助力工业数字化转型。

pz89012345的博客 550

C++快速入门 (十) 创建类

一,类的定义 (1). 什么是类 类是包含某种对象特性的集合,可以通过类来创建对象。如人(类) --> 具体的某个人(对象)。可以看些面向对象的文章。这里就不多阐述了。 (2). 创建类 和 类成员 使用关键字class 创建类。 class 类型 {    }; 类可以包含,一般成员 和 函数成员,如下面的 Base class

meiwm的专栏 1853

Boost电路双闭环控制MATLAB仿真

通过电流内环控制,我们可以改变目标平均电流基准值的大小来闭环改变占空比,再改变输出电压与电路电流,直到电路电流达到基准电流才达到稳态。但是我们的基准电流依旧是外部提供的,下边的电压外环控制就是电路自己计算基准电流。

Fourglsl的博客 5844

Scissor算法实战:利用bulkRNA表型数据精准定位单细胞亚群

本文详细介绍了Scissor算法的实战应用,该算法通过整合bulkRNA-seq的丰富表型信息与单细胞数据,精准识别与特定临床结局(如不良预后)相关的单细胞亚群。文章深入解析了算法三步走的核心思想,并提供了适配Seurat v5的完整代码解决方案,帮助研究者从海量数据中提炼具有生物学和临床价值的洞见。

ww90123的博客 254

C++中如何创建一个类?

1.创建类的语法 class 类名{ }; class是定义类的关键字,和struct基本相同 2.类里面的变量 类里的变量即属性 成员变量 把对象共同的特征抽象为属性(成员变量) 共性 成员变量 用来 描述 一类事物的特征 3.类里的函数 类里面的函数 即方法 成员方法(函数) 把对象共同的行为抽象为方法(函数) 成员方法 用来 描述 一类事物的行为 4.创建对象 类实例化具体的对象 ...

Nire_Yeyu的博客 1万+

【PCIe】CDNS PCIe VIP 杂记 -- Callback

最近在研究Cadence PCIe VIP,怎一个“惨淡”来描述。用的真是一言难尽啊,都是泪。记录一些最近学习的觉得想记录的内容在此,仅供参考讨论学习哈。有不对之处请指出大家一起讨论。

小邦是名小ICer的博客 2716

【C++初阶】二、类与对象(上篇)

面向过程和面向对象初步认识 | 类的引入和定义 | 类的作用域 | 类的实例化 | 类对象模型 | this 指针 | C++的代码风格详解

枫叶先生的博客 1133

15-YOLOV8OBB损失函数详解

在Ultralytics YOLO 模型中,OBB 由YOLO OBB 格式中的四个角点表示。这样可以更准确地检测到物体,因为边界框可以旋转以更好地适应物体。其坐标在 0 和 1 之间归一化:YOLO 在内部处理损失和输出是xywhr 格式,xy表示边界框的中心点、whr表示宽度、高度和旋转角度。

zqb_123的博客 797

【SpringBoot 4.x 第70节】夯爆了,企业级 API 设计规范落地:状态码、错误码、接口文档与兼容性(超详解)!

🏆 本文收录于 《滚雪球学 Spring Boot 4.x》 专栏。本专栏面向 有一定 Java 基础,但尚未系统学习 Spring Boot 的读者,采用“滚雪球式学习法”:先跑通、再理解、再重构、再上线,带你从第一个 Hello API 开始,逐步完成一个可部署、可监控、可扩展的后端项目。

**My Coding Family** 128

【C++初阶】类与对象(二)

构造函数——初始化析构函数——清理拷贝构造函数——使用同类对象初始化创建对象赋值运算符重载——一个对象赋值给另一个对象const成员函数——修饰this指针取地址重载——获取对象地址默认的意思是我们自己不写编译器自动生成,当然我们也可以自己写。1、写,应该怎样实现;2、不写,是否符合要求。

2301_77459845的博客 635

【25届数字IC秋招总结】面试经验15——比特大陆-算能

25届数字ic面试记录——比特大陆-算能

lalala0635的博客 553

二、C++语言初阶:类与对象

认识类与对象、关键字static、const、inline

小脑斧的博客 1575

2、OTA/gm - C滤波器的架构与设计

本文深入探讨了OTA/gm-C滤波器的两种主要设计方法:基于LC梯形网络的设计与多环反馈(MLF)结构。前者包括元件替代法和信号模拟法,分别通过电感替代或电路方程模拟实现低敏感度滤波器;后者通过积分器级联与反馈网络合成全极点或含任意传输零点的传递函数。文中详细分析了不同结构如IFLF和LF的反馈矩阵、传递函数及性能差异,指出LF结构在敏感度、噪声和整体性能上的优势。同时比较了各类方法的优缺点及适用场景,为高频连续时间集成电路滤波器的设计提供了系统性指导。

fanta的博客 136

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

C++学习_初阶(二)——类与对象(上)

目录1 面向过程和面向对象初步认识3.类的定义4.类的访问限定符及封装4.1 访问限定符4.2 封装5 类的作用域6 类的实例化7.类对象模型7.1 如何计算类对象的大小7.2 类对象的存储方式7.3 结构体内存对齐规则8.this指针8.1 this指针的引出8.2 this指针的特性 1 面向过程和面向对象初步认识 C: 面向过程 C++: 基于对象 2.类的引入 C语言中,结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数 3.类的定义 class className { //

graceyun的博客 327

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【C++初阶】二、类与对象(二)_ 类的6个默认成员函数

类的6个默认成员函数 | 构造函数 | 析构函数 | 拷贝构造函数 | 赋值运算符重载 | const 成员 | 取地址及const取地址操作符重载

枫叶先生的博客 846

C++初阶类与对象(二):详解构造函数和析构函数

1.类的6个默认成员函数 2构造函数 2.1引入和概念 2.2构造函数特性 2.2.1特性1~4 2.2.2注意 2.2.3特性5~7 2.2.4注意 3析构函数 3.1概念 3.2特性

qq_74415153的博客 1693

C++初阶(03):类与对象(二)

本文全面解析了C++类的6个默认成员函数及其应用场景,重点讲解了构造函数、析构函数、拷贝构造函数三大核心内容。其中:1. 构造函数详解了默认构造、初始化列表、explicit关键字等关键概念;2. 析构函数分析了资源释放机制和调用顺序;3. 拷贝构造函数深入探讨了深浅拷贝问题。文章还系统讲解了const成员函数、运算符重载规则、赋值运算符重载等进阶内容,并提供了日期类的完整实现示例。

2401_86650143的博客 458

C++初阶学习第三弹——类与对象(上)——初始类与对象

C++类与对象部分超详解!!!(新手可入)(上)

2301_80220607的博客 5991

C++初阶——类与对象(上篇)

与C语言中存在的结构体不同,在类中,不仅可以定义变量,还可以定义函数。在C++中,使用class作为定义一个类的关键字。class body;//由成员变量和成员函数组成。class作为定义类的关键字,className为类的名字,{}中为类的主体,注意类定义结束后存在一个不可省略的分号。类体中的内容称为类的成员,类中的变量称为类的属性或者成员变量;类中函数被称为类的方法或者成员函数。成员函数的声明和定义全部放在类体中,需要注意的是,这种写法会导致编译器将成员函数当作内联函数处理。

qq_55890817的博客 2896

C++初阶学习第五弹——类与对象(下)——类与对象的收官战

C++类与对象连续篇(下)——这三篇小白可以好好看看,都是很重要的知识!!!

2301_80220607的博客 4699

C++初阶学习第四弹——类与对象(中)——刨析类与对象的核心点

C++初阶学习——类与对象(中)——刨析类与对象的核心点,非常详细,适合小白直接入手学习!!!

2301_80220607的博客 5598

【C++初阶】三、类和对象(面向过程、class类、类的访问限定符和封装、类的实例化、类对象模型、this指针)

C++类和对象:面向过程和面向对象初步认识 ;类的引入 -- struct类 ;类的定义 -- class类 ;类的访问限定符和封装 ;类的实例化 ;类对象模型 ;this指针

正在努力学C呀!(要学好久呢......) 3342

【c++初阶】类与对象(下)

类与对象的完结篇

weixin_74967884的博客 2653
上一篇: C++初阶 —— 类与对象(一)
下一篇: C++初阶 —— 类与对象(三)
挨代码
博客等级 码龄5年 1696粉丝 384原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值