오늘은 컨트랙트에서 상속하는 법과 함수의 접근 범위를 결정하는 가시성, 그리고 네번째 퀴즈를 풀었다.
contract DAD {
function dad() virtual public pure returns(string memory) {
return "dad from DAD";
}
}
contract MOM {
function mom() public pure returns(string memory) {
return "mom from MOM";
}
}
contract CHILD2 is DAD, MOM {
function child() public pure returns(string memory) {
return "child from CHILD";
}
}
virtual
, override
로 컨트랙트 사이에 특정 함수를 상속받아 사용할 수도 있다.contract DAD {
function dad() virtual public pure returns(string memory) {
return "dad from DAD";
}
}
contract CHILD3 is DAD {
function child() public pure returns(string memory) {
return "child from CHILD";
}
function dad() override public pure returns(string memory) {
return "dad from CHILD";
}
}
contract DAD {
function dad() public pure returns(string memory) {
return "dad from DAD";
}
}
contract MOM {
function mom() public pure returns(string memory) {
return "mom from MOM";
}
}
contract CHILD2 is DAD, MOM {
function child() public pure returns(string memory) {
return "child from CHILD";
}
}
contract GRANDCHILD is CHILD2 {
function grandChild() public pure returns(string memory) {
return "grandChild";
}
}
override
와 virtual
을 동시에 사용할 수도 있다.(상속을 받고 상속을 해줄 때)contract DAD {
function who() virtual public pure returns(string memory) {
return "dad from DAD";
}
}
contract MOM {
function who() virtual public pure returns(string memory) {
return "mom from MOM";
}
}
contract CHILD2 is DAD, MOM {
function who() virtual override(DAD, MOM) public pure returns(string memory) {
return "child from CHILD";
}
}
contract GRANDCHILD is CHILD2 {
function who() override public pure returns(string memory) {
return "grandChild";
}
}
contract CHILD2 is DAD, MOM { // MOM 상속
function who() override(DAD, MOM) public pure returns(string memory) {
return super.who();
}
}
contract CHILD2_2 is MOM, DAD { // DAD 상속
function who() override(DAD, MOM) public pure returns(string memory) {
return super.who();
}
}
external
, private
일 경우 오류가 발생한다. internal
, public
은 가능.new
는 머클패트리샤트라이
에서 새로운 리프 노드를 만든다고 보면 된다.contract MOM {
DAD husband = new DAD();
contract DAD {
uint public wallet=100;
uint internal crypto=1000;
uint private emergency=10000;
public
변수만 가져올 수 있다.(internal
, private
는 가져오기 불가능), (external
변수는 선언이 불가능하고 함수에서만 가능함)internal
임.public
만 가능.