1 1.1 christos /* This test script is part of GDB, the GNU debugger. 2 1.1 christos 3 1.11 christos Copyright 1999-2024 Free Software Foundation, Inc. 4 1.1 christos 5 1.1 christos This program is free software; you can redistribute it and/or modify 6 1.1 christos it under the terms of the GNU General Public License as published by 7 1.1 christos the Free Software Foundation; either version 3 of the License, or 8 1.1 christos (at your option) any later version. 9 1.1 christos 10 1.1 christos This program is distributed in the hope that it will be useful, 11 1.1 christos but WITHOUT ANY WARRANTY; without even the implied warranty of 12 1.1 christos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 1.1 christos GNU General Public License for more details. 14 1.1 christos 15 1.1 christos You should have received a copy of the GNU General Public License 16 1.1 christos along with this program. If not, see <http://www.gnu.org/licenses/>. */ 17 1.1 christos 18 1.1 christos #include <iostream> 19 1.1 christos 20 1.1 christos using namespace std; 21 1.1 christos 22 1.1 christos void marker1() 23 1.1 christos { 24 1.1 christos return; 25 1.1 christos } 26 1.1 christos 27 1.1 christos class A1 { 28 1.1 christos int x; 29 1.1 christos int y; 30 1.1 christos 31 1.1 christos friend ostream& operator<<(ostream& outs, A1 one); 32 1.1 christos 33 1.1 christos public: 34 1.1 christos 35 1.1 christos A1(int a, int b) 36 1.1 christos { 37 1.1 christos x=a; 38 1.1 christos y=b; 39 1.1 christos } 40 1.1 christos 41 1.1 christos A1 operator+=(int value); 42 1.1 christos A1 operator+(const A1&); 43 1.1 christos A1 operator-(const A1&); 44 1.1 christos A1 operator%(const A1&); 45 1.1 christos int operator==(const A1&); 46 1.1 christos int operator!=(const A1&); 47 1.1 christos int operator&&(const A1&); 48 1.1 christos int operator||(const A1&); 49 1.1 christos A1 operator<<(int); 50 1.1 christos A1 operator>>(int); 51 1.1 christos A1 operator|(const A1&); 52 1.1 christos A1 operator^(const A1&); 53 1.1 christos A1 operator&(const A1&); 54 1.1 christos int operator<(const A1&); 55 1.1 christos int operator<=(const A1&); 56 1.1 christos int operator>=(const A1&); 57 1.1 christos int operator>(const A1&); 58 1.1 christos A1 operator*(const A1&); 59 1.1 christos A1 operator/(const A1&); 60 1.1 christos A1 operator=(const A1&); 61 1.1 christos 62 1.1 christos A1 operator~(); 63 1.1 christos A1 operator+(); 64 1.1 christos A1 operator-(); 65 1.1 christos int operator!(); 66 1.1 christos A1 operator++(); 67 1.1 christos A1 operator++(int); 68 1.1 christos A1 operator--(); 69 1.1 christos A1 operator--(int); 70 1.1 christos 71 1.1 christos }; 72 1.1 christos 73 1.1 christos 74 1.1 christos A1 A1::operator+(const A1& second) 75 1.1 christos { 76 1.1 christos A1 sum(0,0); 77 1.1 christos sum.x = x + second.x; 78 1.1 christos sum.y = y + second.y; 79 1.1 christos 80 1.1 christos return (sum); 81 1.1 christos } 82 1.1 christos 83 1.1 christos A1 A1::operator*(const A1& second) 84 1.1 christos { 85 1.1 christos A1 product(0,0); 86 1.1 christos product.x = this->x * second.x; 87 1.1 christos product.y = this->y * second.y; 88 1.1 christos 89 1.1 christos return product; 90 1.1 christos } 91 1.1 christos 92 1.1 christos A1 A1::operator-(const A1& second) 93 1.1 christos { 94 1.1 christos A1 diff(0,0); 95 1.1 christos diff.x = x - second.x; 96 1.1 christos diff.y = y - second.y; 97 1.1 christos 98 1.1 christos return diff; 99 1.1 christos } 100 1.1 christos 101 1.1 christos A1 A1::operator/(const A1& second) 102 1.1 christos { 103 1.1 christos A1 div(0,0); 104 1.1 christos div.x = x / second.x; 105 1.1 christos div.y = y / second.y; 106 1.1 christos 107 1.1 christos return div; 108 1.1 christos } 109 1.1 christos 110 1.1 christos A1 A1::operator%(const A1& second) 111 1.1 christos { 112 1.1 christos A1 rem(0,0); 113 1.1 christos rem.x = x % second.x; 114 1.1 christos rem.y = y % second.y; 115 1.1 christos 116 1.1 christos return rem; 117 1.1 christos } 118 1.1 christos 119 1.1 christos int A1::operator==(const A1& second) 120 1.1 christos { 121 1.1 christos int a = (x == second.x); 122 1.1 christos int b = (y == second.y); 123 1.1 christos 124 1.1 christos return (a && b); 125 1.1 christos } 126 1.1 christos 127 1.1 christos int A1::operator!=(const A1& second) 128 1.1 christos { 129 1.1 christos int a = (x != second.x); 130 1.1 christos int b = (y != second.y); 131 1.1 christos 132 1.1 christos return (a || b); 133 1.1 christos } 134 1.1 christos 135 1.1 christos int A1::operator&&(const A1& second) 136 1.1 christos { 137 1.1 christos return ( x && second.x); 138 1.1 christos } 139 1.1 christos 140 1.1 christos int A1::operator||(const A1& second) 141 1.1 christos { 142 1.1 christos return ( x || second.x); 143 1.1 christos } 144 1.1 christos 145 1.1 christos A1 A1::operator<<(int value) 146 1.1 christos { 147 1.1 christos A1 lshft(0,0); 148 1.1 christos lshft.x = x << value; 149 1.1 christos lshft.y = y << value; 150 1.1 christos 151 1.1 christos return lshft; 152 1.1 christos } 153 1.1 christos 154 1.1 christos A1 A1::operator>>(int value) 155 1.1 christos { 156 1.1 christos A1 rshft(0,0); 157 1.1 christos rshft.x = x >> value; 158 1.1 christos rshft.y = y >> value; 159 1.1 christos 160 1.1 christos return rshft; 161 1.1 christos } 162 1.1 christos 163 1.1 christos A1 A1::operator|(const A1& second) 164 1.1 christos { 165 1.1 christos A1 abitor(0,0); 166 1.1 christos abitor.x = x | second.x; 167 1.1 christos abitor.y = y | second.y; 168 1.1 christos 169 1.1 christos return abitor; 170 1.1 christos } 171 1.1 christos 172 1.1 christos A1 A1::operator^(const A1& second) 173 1.1 christos { 174 1.1 christos A1 axor(0,0); 175 1.1 christos axor.x = x ^ second.x; 176 1.1 christos axor.y = y ^ second.y; 177 1.1 christos 178 1.1 christos return axor; 179 1.1 christos } 180 1.1 christos 181 1.1 christos A1 A1::operator&(const A1& second) 182 1.1 christos { 183 1.1 christos A1 abitand(0,0); 184 1.1 christos abitand.x = x & second.x; 185 1.1 christos abitand.y = y & second.y; 186 1.1 christos 187 1.1 christos return abitand; 188 1.1 christos } 189 1.1 christos 190 1.1 christos int A1::operator<(const A1& second) 191 1.1 christos { 192 1.1 christos A1 b(0,0); 193 1.1 christos b.x = 3; 194 1.1 christos return (x < second.x); 195 1.1 christos } 196 1.1 christos 197 1.1 christos int A1::operator<=(const A1& second) 198 1.1 christos { 199 1.1 christos return (x <= second.x); 200 1.1 christos } 201 1.1 christos 202 1.1 christos int A1::operator>=(const A1& second) 203 1.1 christos { 204 1.1 christos return (x >= second.x); 205 1.1 christos } 206 1.1 christos 207 1.1 christos int A1::operator>(const A1& second) 208 1.1 christos { 209 1.1 christos return (x > second.x); 210 1.1 christos } 211 1.1 christos 212 1.1 christos int A1::operator!(void) 213 1.1 christos { 214 1.1 christos return (!x); 215 1.1 christos } 216 1.1 christos 217 1.1 christos A1 A1::operator-(void) 218 1.1 christos { 219 1.1 christos A1 neg(0,0); 220 1.1 christos neg.x = -x; 221 1.1 christos neg.y = -y; 222 1.1 christos 223 1.1 christos return (neg); 224 1.1 christos } 225 1.1 christos 226 1.1 christos A1 A1::operator+(void) 227 1.1 christos { 228 1.1 christos A1 pos(0,0); 229 1.1 christos pos.x = +x; 230 1.1 christos pos.y = +y; 231 1.1 christos 232 1.1 christos return (pos); 233 1.1 christos } 234 1.1 christos 235 1.1 christos A1 A1::operator~(void) 236 1.1 christos { 237 1.1 christos A1 acompl(0,0); 238 1.1 christos acompl.x = ~x; 239 1.1 christos acompl.y = ~y; 240 1.1 christos 241 1.1 christos return (acompl); 242 1.1 christos } 243 1.1 christos 244 1.1 christos A1 A1::operator++() // pre increment 245 1.1 christos { 246 1.1 christos x = x +1; 247 1.1 christos 248 1.1 christos return (*this); 249 1.1 christos } 250 1.1 christos 251 1.1 christos A1 A1::operator++(int) // post increment 252 1.1 christos { 253 1.1 christos y = y +1; 254 1.1 christos 255 1.1 christos return (*this); 256 1.1 christos } 257 1.1 christos 258 1.1 christos A1 A1::operator--() // pre decrement 259 1.1 christos { 260 1.1 christos x = x -1; 261 1.1 christos 262 1.1 christos return (*this); 263 1.1 christos } 264 1.1 christos 265 1.1 christos A1 A1::operator--(int) // post decrement 266 1.1 christos { 267 1.1 christos y = y -1; 268 1.1 christos 269 1.1 christos return (*this); 270 1.1 christos } 271 1.1 christos 272 1.1 christos 273 1.1 christos A1 A1::operator=(const A1& second) 274 1.1 christos { 275 1.1 christos 276 1.1 christos x = second.x; 277 1.1 christos y = second.y; 278 1.1 christos 279 1.1 christos return (*this); 280 1.1 christos } 281 1.1 christos 282 1.1 christos A1 A1::operator+=(int value) 283 1.1 christos { 284 1.1 christos 285 1.1 christos x += value; 286 1.1 christos y += value; 287 1.1 christos 288 1.1 christos return (*this); 289 1.1 christos } 290 1.1 christos 291 1.1 christos ostream& operator<<(ostream& outs, A1 one) 292 1.1 christos { 293 1.1 christos return (outs << endl << "x = " << one.x << endl << "y = " << one.y << endl << "-------" << endl); 294 1.1 christos } 295 1.1 christos 296 1.1 christos class A2 { 297 1.1 christos public: 298 1.1 christos A2 operator+(); 299 1.1 christos }; 300 1.1 christos 301 1.1 christos A2 A2::operator+() 302 1.1 christos { 303 1.1 christos return A2 (); 304 1.1 christos } 305 1.1 christos 306 1.1 christos class Member 307 1.1 christos { 308 1.1 christos public: 309 1.1 christos int z; 310 1.12 christos 311 1.12 christos int operator() (); 312 1.12 christos int operator() (int); 313 1.1 christos }; 314 1.1 christos 315 1.12 christos int Member::operator() () 316 1.12 christos { 317 1.12 christos return z; 318 1.12 christos } 319 1.12 christos 320 1.12 christos int Member::operator() (int value) 321 1.12 christos { 322 1.12 christos return value * z; 323 1.12 christos } 324 1.12 christos 325 1.1 christos bool operator== (const Member &m1, const Member &m2) 326 1.1 christos { 327 1.1 christos return m1.z == m2.z; 328 1.1 christos } 329 1.1 christos 330 1.1 christos class Container 331 1.1 christos { 332 1.1 christos public: 333 1.1 christos Member m; 334 1.1 christos 335 1.1 christos Member& operator* (); 336 1.1 christos }; 337 1.1 christos 338 1.1 christos Member& Container::operator* () 339 1.1 christos { 340 1.1 christos return this->m; 341 1.1 christos } 342 1.1 christos 343 1.1 christos int main (void) 344 1.1 christos { 345 1.1 christos A1 one(2,3); 346 1.1 christos A1 two(4,5); 347 1.1 christos A1 three(0,0); 348 1.1 christos Container c; 349 1.1 christos Member mem1, mem2; 350 1.1 christos int val; 351 1.12 christos Member Container::* mptr = &Container::m; 352 1.1 christos 353 1.1 christos mem1.z = 5; 354 1.1 christos mem2.z = 7; 355 1.12 christos c.m.z = 8; 356 1.1 christos 357 1.1 christos marker1(); // marker1-returns-here 358 1.1 christos cout << one; // marker1-returns-here 359 1.1 christos cout << two; 360 1.1 christos three = one + two; 361 1.1 christos cout << "+ " << three; 362 1.1 christos three = one - two; 363 1.1 christos cout << "- " << three; 364 1.1 christos three = one * two; 365 1.1 christos cout <<"* " << three; 366 1.1 christos three = one / two; 367 1.1 christos cout << "/ " << three; 368 1.1 christos three = one % two; 369 1.1 christos cout << "% " << three; 370 1.1 christos three = one | two; 371 1.1 christos cout << "| " <<three; 372 1.1 christos three = one ^ two; 373 1.1 christos cout << "^ " <<three; 374 1.1 christos three = one & two; 375 1.1 christos cout << "& "<< three; 376 1.1 christos 377 1.1 christos val = one && two; 378 1.1 christos cout << "&& " << val << endl << "-----"<<endl; 379 1.1 christos val = one || two; 380 1.1 christos cout << "|| " << val << endl << "-----"<<endl; 381 1.1 christos val = one == two; 382 1.1 christos cout << " == " << val << endl << "-----"<<endl; 383 1.1 christos val = one != two; 384 1.1 christos cout << "!= " << val << endl << "-----"<<endl; 385 1.1 christos val = one >= two; 386 1.1 christos cout << ">= " << val << endl << "-----"<<endl; 387 1.1 christos val = one <= two; 388 1.1 christos cout << "<= " << val << endl << "-----"<<endl; 389 1.1 christos val = one < two; 390 1.1 christos cout << "< " << val << endl << "-----"<<endl; 391 1.1 christos val = one > two; 392 1.1 christos cout << "> " << val << endl << "-----"<<endl; 393 1.1 christos 394 1.1 christos three = one << 2; 395 1.1 christos cout << "lsh " << three; 396 1.1 christos three = one >> 2; 397 1.1 christos cout << "rsh " << three; 398 1.1 christos 399 1.1 christos three = one; 400 1.1 christos cout << " = "<< three; 401 1.1 christos three += 5; 402 1.1 christos cout << " += "<< three; 403 1.1 christos 404 1.1 christos val = (!one); 405 1.1 christos cout << "! " << val << endl << "-----"<<endl; 406 1.1 christos three = (+one); 407 1.1 christos cout << "+ " << three; 408 1.1 christos three = (-one); 409 1.1 christos cout << "- " << three; 410 1.1 christos three = (~one); 411 1.1 christos cout << " ~" << three; 412 1.1 christos three++; 413 1.1 christos cout << "postinc " << three; 414 1.1 christos three--; 415 1.1 christos cout << "postdec " << three; 416 1.1 christos 417 1.1 christos --three; 418 1.1 christos cout << "predec " << three; 419 1.1 christos ++three; 420 1.1 christos cout << "preinc " << three; 421 1.1 christos 422 1.12 christos val = mem1 (); 423 1.12 christos cout << "funcall " << val << endl; 424 1.12 christos val = mem1 (10); 425 1.12 christos cout << "funcall 2 " << val << endl; 426 1.12 christos val = (c.*mptr) (11); 427 1.12 christos cout << "funcall 3 " << val << endl; 428 1.12 christos 429 1.1 christos (*c).z = 1; 430 1.1 christos 431 1.1 christos return 0; 432 1.1 christos 433 1.1 christos } 434