|
Thanks, so in my simple words - instead of using multiple inheritance in downstream fashion doing it this way is sort of in reverse - the printer class goes first.
Your are very helpful and much appreciated.
Thanks.
Cheers Vaclav
|
|
|
|
|
Yes we are putting composition over inheritance, so our classes are trying to achieve multiple
and flexible behaviour (reusing as much code as possible) rather than inheritance from a base
or parent class.
I would also add there is one final thing you will be able to do if you go that path which you
can't possibly do with your current scheme, which is to thread the classes or at least the one
that had the old ISR code to help its response and speed.
In vino veritas
|
|
|
|
|
I am still not too comfortable with passing variables to
constructor, but eventually I'll get over it.
But this got me stumped - never heard of having const used this way. Why?
So how do you read this -X(x) with relation to following function double x()?
Please if this is too basic for you just let someone else answer, OK?
I am asking for help and have no intent to waste your time on trivia.
Thanks
class Point2d{
public:
Point2d() {}
Point2d(double x, double y)
: X(x), Y(y) {}
double x() const { return X; }
double y() const { return Y; }
/**
* Returns the norm of this vector.
* <a href="http://www.codeproject.com/Members/return">@return</a> the norm
*/
double norm() const {
return sqrt( X * X + Y * Y );
}
void setCoords(double x, double y) {
X = x; Y = y;
}
|
|
|
|
|
Using const that way in the declaration of the method tells the compiler that the method is able to be called on constant instances of that object. It indicates that the object is not altered in any way by calling that method. Examples using the class defined above:
const Point2d p1(2,3);
Point2d p2(4,5);
p1.setCoords(3,2);
p2.setCoords(5,4);
double n = p1.norm();
Cheers,
Mick
------------------------------------------------
It doesn't matter how often or hard you fall on your arse, eventually you'll roll over and land on your feet.
|
|
|
|
|
|
The link is broken.
Thanks anyway
|
|
|
|
|
It was working this morning, because I read the content to see that it answered the question. Most likely a problem at Microsoft's end; keep trying. Or just use Google to find an alternate page.CodeProject bug, link now fixed.
modified 10-Oct-16 5:02am.
|
|
|
|
|
There's a colon missing between the "https" and "//" in your link - but it's there in the link text. Maybe this a CodeProject bug?
|
|
|
|
|
Thanks, there is a message in Bugs & Suggestions about this, but it is supposed to be fixed now. I will edit my response.
|
|
|
|
|
*i am also new to C++*
i'm not able to figure out where are X and Y defined
i mean the capital ones.
|
|
|
|
|
Ratul Thakur wrote:
i'm not able to figure out where are X and Y defined They aren't. The OP's code is incomplete and thus will not compile.
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"You can easily judge the character of a man by how he treats those who can do nothing for him." - James D. Miles
|
|
|
|
|
how do you initialize this CString array in msvc mfc 2015?
CString weekday[] = {"Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat"};
It worked from msvc++ 2010 but does not work for 2015.
Thanx in Advance
|
|
|
|
|
By not working, do you mean it doesn't compile, doesn't show the values you thought, or someting other?
|
|
|
|
|
It will not compile using msvc++ 2015
|
|
|
|
|
Member 9411471 wrote: It will not compile using msvc++ 2015
And what compiler error does it produce?
|
|
|
|
|
CString weekday[] = {CString ("Sun"), CString( "Mon")...};
|
|
|
|
|
OK, this is really simple question, with example code to boot.
The function pointer declaration is this
void (*gpf_isr)(void) = (0UL);
It is used by this function
void UOTGHS_Handler( void )
{
if (gpf_isr)
gpf_isr();
}
and I access it like so
extern void (*gpf_isr)(void);
then I assign my local poiter / version of the function
gpf_isr = ( object ) . UTOGHS_Handler;
The silly question why this also get pass the compiler , no errors
extern void (*gpf_isr)(void) = (0UL);
The pointer gets reassigned , but ...
|
|
|
|
|
|
That is pretty clear that defining the variable is OK, but if optioned GCC will give a warning.
Kind like deleting a file and being ask "are you sure?"
Thanks
.
|
|
|
|
|
Yes. You may find (on the web) folks arguing that warning is not legitimate.
In a clean implementation you don't qualify with extern the variable in the source file wherein you define it.
|
|
|
|
|
The key point here is the extern qualifier. That states that the variable can be referred to from any module in the final linked executable, but only one instance of it will actually exist.
|
|
|
|
|
C++ has very specific way / syntax to instantiate a class with parameters,
so basic that Google can't find it for me .
I need this for implementing multiple inheritance.
I can instantiate the "top class" in multiple inheritance hierarchy , but it uses system generated default constructors, without parameters of course.
My goal is to create an instance of the top class with parameters passed to the hierarchy lower chain classes.
Do I make sense? I hope so.
Thanks
Vaclav
|
|
|
|
|
|
Quote: but it uses system generated default constructors, without parameters of course Only if you don't provide an implementation of (with or without parameters) the class contructor.
Quote: My goal is to create an instance of the top class with parameters passed to the hierarchy lower chain classes.
Do I make sense? Before attempting the multiple-inheritance step, make sure you understand how class constructor/destructor work.
|
|
|
|
|
class A
{
public :
A( int p ) : a( p )
{
}
protected:
int a;
};
class B
{
public:
B( int q ) : b( q )
{
}
protected:
int b;
};
class C : public A, B
{
public :
C( int x, int y, int z ) : A( x ), B( y), c( z )
{
a = x;
}
private:
int c;
};
int _tmain(int argc, _TCHAR* argv[])
{
C test( 1, 2, 3 );
return 0;
}
Will this help?
|
|
|
|