如果您想了解和SFML继承问题的知识,那么本篇文章将是您的不二之选。我们将深入剖析的各个方面,并为您解答SFML继承问题的疑在这篇文章中,我们将为您介绍的相关知识,同时也会详细的解释SFML继承问题的
如果您想了解和SFML继承问题的知识,那么本篇文章将是您的不二之选。我们将深入剖析的各个方面,并为您解答SFML继承问题的疑在这篇文章中,我们将为您介绍的相关知识,同时也会详细的解释SFML继承问题的运用方法,并给出实际的案例分析,希望能帮助到您!
本文目录一览:- (SFML)继承问题(C ++)(c++继承代码)
- Android App启动错误的问题(connection to the server was unsuccessful)
- c# – 新手继承问题
- C#泛型继承问题
- C#继承问题
(SFML)继承问题(C ++)(c++继承代码)
好吧,在咨询了SFML论坛之后,我将代码重构为以下代码:
Sprite.h:
#include "AssetManager.h"
class Sprite{
public:
sf::Sprite m_sprite;
sf::Vector2f sprite_scale;
sf::Vector2u original_size;
sf::Vector2f texture_size;
Sprite(){}
sf::Sprite set_sprite(sf::Texture& tx,sf::IntRect rect,sf::Vector2f size);
};
Sprite.cpp:
#include "Sprite.h"
sf::Sprite Sprite::set_sprite(sf::Texture& tx,sf::Vector2f size) {
sf::Sprite spr(tx);
spr.setTextureRect(rect);
original_size =tx.getSize();
texture_size.x = static_cast<float>(original_size.x);
texture_size.y = static_cast<float>(original_size.y);
sprite_scale.x = size.x / texture_size.x;
sprite_scale.y = size.y / texture_size.y;
spr.setScale(sf::Vector2f(sprite_scale.x,sprite_scale.y));
spr.setOrigin(sf::Vector2f(original_size.x / 2,original_size.y / 2));
return spr;
}
Entity.h:
#pragma once
#include "Sprite.h"
#include "collision.h"
#include "Timer.h"
class Entity {
public:
Sprite spr;
sf::Sprite entity_sprite;
int health;
float max_speed;
sf::Vector2f speed;
sf::Vector2f direction;
float acceleration;
bool collision = false;
timer t;
float acc_time;
};
Player.h:
#pragma once
#include "Entity.h"
class Player:public Entity {
public:
Player();
float acc_time = t.accumulate_time();
void keyboard_controls();
void mouse_controls(sf::Vector2f cursor);
};
Player.cpp:
#include "Player.h"
#include <math.h>
Player::Player() {
speed = { 0,0 };
acceleration = 2;
max_speed = 500 + acceleration;
entity_sprite = spr.set_sprite(AssetManager::LoadTexture("res/wildcard.png"),{ 0,60,63 },{ 60,63 });
}
简而言之,Sprite
类的构造函数被具有完全相同作用的方法所取代,这样我就可以简单地在Sprite
内声明一个没有参数的Entity
对象类,并且派生的Player
类不会有任何问题,因为不会要求我为Sprite和Entity类创建默认构造函数。
Android App启动错误的问题(connection to the server was unsuccessful)
问题描述:
(file:///android_asset/www/index.html)
super.setIntegerProperty("loadUrlTimeoutValue",10000);
完整代码如下(设置超时为 10 秒)
@Override
publicvoid onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
super.loadUrl("file:///android_asset/www/home/index.html");
super.setIntegerProperty("loadUrlTimeoutValue",10000);
方法3:改名法
c# – 新手继承问题
码:
namespace ConsoleApplication2 { class Program { static void Main(string[] args) { Pets pet1 = new Dog(); Pets pet2 = new Cat(); pet1.Say(); pet2.Say(); Console.ReadKey(); } } class Pets { public void Say() { } } class Dog : Pets { new public void Say() { Console.WriteLine("Dog barks."); } } class Cat : Pets { new public void Say() { Console.WriteLine("Cat meows."); } } }
我试图通过c# programming guide on MSDN,但是我觉得很难理解那里的一些例子.如果有人可以链接到一个很好的“假人遗产”网站,那将是非常感激的.
解决方法
namespace ConsoleApplication2 { class Program { static void Main(string[] args) { Pets pet1 = new Dog(); Pets pet2 = new Cat(); pet1.Say(); pet2.Say(); Console.ReadKey(); } } class Pets { public virtual void Say() { Console.WriteLine("Pet makes generic noise"); } } class Dog : Pets { public override void Say() { Console.WriteLine("Dog barks."); } } class Cat : Pets { public override void Say() { Console.WriteLine("Cat meows."); } } }
C#泛型继承问题
Error 2 Argument 1: cannot convert from 'ConsoleApplication1.Stable' to 'ConsoleApplication1.ShelterBase<ConsoleApplication1.AnimalBase>' C:\Users\ysn\Desktop\ConsoleApplication1\ConsoleApplication1\Program.cs 43 26 ConsoleApplication1
我看不到这个问题,你能为我提供另一种做这种事情的方法吗?
abstract class AnimalBase { public int SomeCommonProperty;} abstract class ShelterBase<T> where T : AnimalBase { public abstract List<T> GetAnimals(); public abstract void FeedAnimals(List<T> animals); } class Horse : AnimalBase { } class Stable : ShelterBase<Horse> { public override List<Horse> GetAnimals() { return new List<Horse>(); } public override void FeedAnimals(List<Horse> animals) { // Feed them } } class Duck : AnimalBase { } class HenHouse : ShelterBase<Duck> { public override List<Duck> GetAnimals() { return new List<Duck>(); } public override void FeedAnimals(List<Duck> animals) { // Feed them } } class Program { static void Main(string[] args) { List<ShelterBase<AnimalBase>> shelters = new List<ShelterBase<AnimalBase>>(); ///////////////////////////// following two lines do not compile shelters.Add(new Stable()); shelters.Add(new HenHouse()); ///////////////////////////// foreach (var shelter in shelters) { var animals = shelter.GetAnimals(); // do sth with 'animals' collection } } }
解决方法
工作原理:
abstract class AnimalBase { public int SomeCommonProperty;} interface IShelterBase<out T> where T : AnimalBase { IEnumerable<T> GetAnimals(); } class Horse : AnimalBase { } class Stable : IShelterBase<Horse> { public IEnumerable<Horse> GetAnimals() { return new List<Horse>(); } } class Duck : AnimalBase { } class HenHouse : IShelterBase<Duck> { public IEnumerable<Duck> GetAnimals() { return new List<Duck>(); } } void Main() { List<IShelterBase<AnimalBase>> shelters = new List<IShelterBase<AnimalBase>>(); shelters.Add(new Stable()); shelters.Add(new HenHouse()); foreach (var shelter in shelters) { var animals = shelter.GetAnimals(); // do something with 'animals' collection } }
C#继承问题
1)我是否需要在每个需要被子类覆盖的函数前面给出“虚拟”?我看到一些没有虚拟关键字的示例,但仍然可以覆盖它们.
2)我需要有一个将在基类中实现的函数,我不希望它被子类重写.我添加了该功能的“固定”关键字.编译器开始抱怨“成员”无法密封,因为它不是覆盖.我在这里做错了吗?
abstract public class ShapeBase { private ShapeDetails _shapedDetails; public CampusCardBase(ShapeDetails shDetails) { _shapedDetails= shDetails; } public virtual void Draw(); public virtual float getWidth(); public virtual void Swap(); public virtual void Erase(); public sealed ShapeDetails getShapeDetails() { return _shapedDetails; } };
解决方法
abstract public void Draw(); abstract public float getWidth(); abstract public void Swap(); abstract public void Erase();
>默认情况下,方法不可覆盖;如果声明为abstract,virtual或override(但不覆盖密封),它们只允许派生类重写.
因此,您不需要为getShapeDetails()提供除public之外的任何其他修饰符:
public ShapeDetails getShapeDetails() { return _shapedDetails; }
另外,您应该坚持使用.NET命名约定并使用Pascal大小写大写方法名称,因此getWidth()变为GetWidth(),getShapeDetails()变为GetShapeDetails().
实际上你应该为你的_shapedDetails字段使用property getter而不是getShapeDetails()方法:
private ShapeDetails _shapedDetails; public ShapeDetails ShapedDetails { get { return _shapedDetails; } }
我们今天的关于和SFML继承问题的分享已经告一段落,感谢您的关注,如果您想了解更多关于Android App启动错误的问题(connection to the server was unsuccessful)、c# – 新手继承问题、C#泛型继承问题、C#继承问题的相关信息,请在本站查询。
本文标签: