[CPP Moudle 02] Ad-hoc polymorphism, operators overload and orthodox canonical classes
6999 ワード
1.コピー作成者 Fixed::Fixed(const Fixed& fixed) // 선언
Fixed a;
Fixed b(a); // a를 복사해 b를 생성했다.
レプリケーション作成者は、既存の値をユーザーにコピーして渡す概念なので、値は変更できません.このためconst
と発表された.
Fixed::Fixed(const Fixed& fixed) // 선언
Fixed a;
Fixed b(a); // a를 복사해 b를 생성했다.
1.1. 浅いコピー
1.2. 深くコピー
2.代入演算子のロード
2.1. 過負荷とは?
CPPでは、関数の名前が同じでパラメータが異なる場合、関数を宣言および定義できます.演算子のオーバーロードは、既存の演算子の再定義と見なすこともできます.通常、元のオブジェクト間では+
などの演算子は使用できません.ただし、+
を定義する機能を演算子で再ロードすると、基本データ型変数のように加算、減算、乗算などの演算を行うことができる.これにより,オブジェクトも基本資料型データのように扱うことができる.
2.2. 演算子のオーバーロード方法
Fixed& operator=(const Fixed& fixed);
演算子のリロードを行うには、演算子キーと演算子を組み合わせて関数の名前を定義します.
クラス内で演算子の再ロードが宣言された場合、クラスメンバー関数を使用して=
を再ロードできます.Fixed::Fixed(const Fixed& fixed)
{
std::cout << "Copy constructor called" << std::endl;
*this = fixed;
}
*this = fixed;
は、左の*this
オブジェクトに対してoperator=
関数を呼び出し、右の被演算子オブジェクトfixed
をパラメータとして渡す.
Fixed& operator=(const Fixed& fixed);
Fixed::Fixed(const Fixed& fixed)
{
std::cout << "Copy constructor called" << std::endl;
*this = fixed;
}
3. const value casting const
として定義された値を変更するには、const_cast<T>
を使用します.const_cast<T>
は、const
と定義された変数の空間自体をconst
一時削除の形式とするために、変数のアドレスをパラメータとして受け入れる.もちろん、逆の場合のように、const
以外の空間をconst
にしてもよい.static_cast<T>
とは異なり、タイプ変換は不可能であることに注意してください.int main(void)
{
const int a = 1;
int b;
b = static_cast<int>(a);
return(0);
}
以上の場合、const
が削除されたかどうかがわかり、만
、aという空間自体はstatic_cast<T>
の呼び出しにおいて、const
の属性は変わらない.この文法はb
に割り当てるために一時的にタイプを調整したにすぎない.したがって,aの値を変更しようとすると,ポインタ操作を用いても結果は同じコンパイルエラーが発生したと判断できる.include <string>
#include <iostream>
int main(void)
{
const std::string a = "hi good";
(*(const_cast<std::string *>(&a)))[1] = 'o';
std::cout << a << std::endl;
return (0);
}
逆に、上記のconst_cast<T>
から見ると、const_cast<T>
が呼び出されるにつれて、a
の空間はconst
の属性を一時的に削除し、値を変更する.
const castでもテキスト領域の値は変更できません.
Reference
この問題について([CPP Moudle 02] Ad-hoc polymorphism, operators overload and orthodox canonical classes), 我々は、より多くの情報をここで見つけました
https://velog.io/@24siefil/CPP-Moudle-02
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
int main(void)
{
const int a = 1;
int b;
b = static_cast<int>(a);
return(0);
}
include <string>
#include <iostream>
int main(void)
{
const std::string a = "hi good";
(*(const_cast<std::string *>(&a)))[1] = 'o';
std::cout << a << std::endl;
return (0);
}
Reference
この問題について([CPP Moudle 02] Ad-hoc polymorphism, operators overload and orthodox canonical classes), 我々は、より多くの情報をここで見つけました https://velog.io/@24siefil/CPP-Moudle-02テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol