早点打完工去睡觉

早点打完工去睡觉

目录

一.单例模式和相关习题

1.不能在外部环境创建该类对象

方法:

代码:

2.创建一个不能被继承的类

方法:

3.创建一个不能被继承,但是可以在外部环境中创建该类对象

方法:

​编辑

4.一个能被继承的类,但不能在外部环境中创建该类的对象


一.单例模式和相关习题

前情概要:无论是公有继承还是私有继承,派生类的方法是可以访问自身的公有,保护和私有的,还可以访问基类的保护和公有的。在派生类中,基类的保护类似于公有,是可以访问的。但是在外部环境中是不可以访问保护和私有属性的对象或方法。

1.不能在外部环境创建该类对象

方法:

单例模式:只能创建一个对象,只能使用方法去调动静态对象,而静态对象只有一份,因此可以达到只能创建一个对象,而其的构造函数被私有化,所以不能在外部环境创建该类对象。为了防止用一个对象去赋值另一个对象我们将其赋值重载删除,为防止用一个对象初始化另外一个对象,我们将其的拷贝构造函数删除,从而达到只能通过调用公有的方法去访问私有的构造函数。

代码:

class Single {
	int value;
private:
	Single(int x = 0) :value(x) {}
	Single(const Single&)=delete;
	Single& operator=(const Single&)=delete;
public:
	~Single(){}
	static Single& getInstance() {
		static Single s(10);
		return s;
	}
};
int main() {
	Single& s2 = Single::getInstance();//只能调用公有的方法去调用私有的构造函数
	//Single* sp = (Single*)malloc(sizeof(Single));
	//*sp = s2;为了防止一个对象赋值另外一个对象,我们把其赋值语句删除掉
}

2.创建一个不能被继承的类

方法:

将构造函数设置为私有的,派生类只能访问基类的保护和公有的属性和方法,不能访问基类的私有属性

class Object {
private:
	Object() {

	}
public:
	~Object(){}
};
class Base :public Object {
public:
	Base() :Object() {

	}
};

C++继承相关内容(三)-LMLPHP

此时就不能继承Object这个类,因为他的构造方法我们无法访问到

3.创建一个不能被继承,但是可以在外部环境中创建该类对象

方法:

final关键字 表示最终类不能被继承,但是该类可以在外部环境中可以创造对象,因为其构造函数是公有属性

代码:

class Object final{
private:
	
public:
	Object() {}
	~Object(){}
	void show()const{}
};
class Base :public Object {
public:
	Base() :Object() {}
};
int main() {
	Object o1;
	o1.show();
}

C++继承相关内容(三)-LMLPHP

4.一个能被继承的类,但不能在外部环境中创建该类的对象

方法:

将构造函数等变成保护类型:一个能被继承的类,但不能在外部环境中创建该类的对象
限制派生类对象不可拷贝和赋值:将基类的拷贝和赋值删掉

代码:

class Object {
private:
protected:
	Object() {}
public:
	Object(const Object&) = delete;
	Object& operator=(const Object&) = delete;
	~Object(){}
	void show()const{}
};
class Base :public Object {
public:
	Base() :Object() {}
};
int main() {
	Object o1;
	o1.show();
}

C++继承相关内容(三)-LMLPHP

好了,关于c++继承相关的内容就学习到介里啦,后续就是c++的多态相关知识,包括虚函数,编联等相关内容。还有就是到了期末复习周呜呜呜,可能更新速率会慢一些

06-08 14:36